2016-03-23 20 views
1

Kendinden barındırılan bir WebAPI sunucusu yazmaya çalışıyorum. Tüm rotaların tek bir kontrolöre gitmesini istiyorum. Bu kontrolör, url'nin kontrolör bölümünü seçebilir ve uygun bir cevaba karar vermek için bunu kullanabilir.WebApi sabit kodlanmış denetleyici yönlendirme

_configuration.Routes.MapHttpRoute 
(
    name: "DefaultApi", 
    routeTemplate: string.Concat("api/Home", "/{id}"), 
    defaults: new { id = RouteParameter.Optional, controllerName="Home" } 
); 

Benim denetleyicisi sınıf "HomeController" denir:

Aşağıdaki rota yapılandırmasına sahip. Tüm URL'leri ona yönlendirmeye çalışıyorum.

HomeController için kod İşte. Şimdilik harici mantık çağrılarını (uzaktan kumanda) açıkladım. Get eyleminde yalnızca bir dizgeyi döndürmelidir. http://localhost:9000/api/Home

{ "Mesaj": "Hiçbir HTTP kaynak bulunamadı istek URI maçları aşağıdaki url çalışırken

public class HomeController : ApiController 
{ 
    private IExternalController<string> remoteController; 

    public HomeController() 
    { 
     remoteController = GlobalKernelConfiguration.GetStandardKernel().Get<IExternalController<string>>(); 
    } 

    public string Get() 
    { 
     return "HELLO FROM INTERNAL"; //remoteController.Get(); 
    } 

    public string Get(int id) 
    { 
     return remoteController.Get(id); 
    } 

    public void Delete(int id) 
    { 
     remoteController.Delete(id); 
    } 

    public void Post(string value) 
    { 
     remoteController.Post(value); 
    } 

    public void Put(int id, string value) 
    { 
     remoteController.Put(id, value); 
    } 
} 

Eve kontrolöre rotaya http://localhost:9000/api/[AnythingHere] beklenir ama aşağıdaki hatayı alıyorum 'http://loca lhost: 9000/aPI/Ev' "" MessageDetail. ":" denetçi ismini veren yok yön talep URI 'http://localhost:9000/api/Home' "} maç için bulunmuştur @CodeCaster yorumlarda sorunu önerildiği gibi

+0

Peki, bu ne yapar? – CodeCaster

+0

@CodeCaster Başlık bilgisini konsol uygulamamdan yazdırmaya gittim ve bir hata keşfettim. Bunu soruya ekledim. –

+0

"HomeController" ın bir "ApiController" işlevi var mı? – CodeCaster

cevap

1

neden oldu yönlendirme seçeneklerinde doğru parametreyi kullanmamak. varsayılan parametre değiştirildiğini

 public static void AddControllerRoute(string controllerName) 
    { 
     _configuration.Routes.MapHttpRoute 
      (
       name: "DefaultApi", 
       routeTemplate: string.Concat("api/Home", "/{id}"), 
       defaults: new { id = RouteParameter.Optional, controller ="Home" } 
      ); 
    } 

bildirimi ve şimdi controllerName" yerine "denetleyici" kullanır:

Bu

bu ben şimdi ne var

_configuration.Routes.MapHttpRoute ( name: "DefaultApi", routeTemplate: string.Concat("api/Home", "/{id}"), defaults: new { id = RouteParameter.Optional, controllerName="Home" } );

önce sahip budur "Bu sorunu çözdü ve şimdi çalışıyor.

İlgili konular