2013-03-07 196 views
3

所以我只花了一小時的時間來調試爲什麼我在System.Web.Http.dll!System.Web.Http.Dispatcher.DefaultHttpControllerSelector.SelectController(System.Net.Http.HttpRequestMessage request) + 0x33f byte上收到客戶端404和服務器端System.Web.Http.HttpResponseException;不管我嘗試過什麼,我都無法讓我的ApiController衍生產品接收請求。保留的ASP.NET MVC控制器名稱?

最後,在嘗試將其轉換爲常規Controller無效後,我發現將名稱從APIController更改爲APIXController只是爲了讓所有內容都能正常工作。

  1. 它在哪裏說API是保留的控制器名稱?
  2. 保留控制器名稱的完整列表在哪裏?
  3. 是否可以繞過使用APIController作爲我的班級名稱的限制,如果是的話,我該怎麼做呢?

一個我檢查的第一件事情是我的路由配置,這是沼澤標準

routes.MapRoute(
       "Default", 
       "{controller}/{action}/{id}", 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

回答

3

APIController不是保留名稱。但是,如果您使用的是標準MVC4模板,那麼默認情況下它會包含WebAPI堆棧的一個實例,並且會註冊以/ api開頭的路由。您很可能會遇到這種情況。

查看AppStart和WebApiConfig.cs文件。

順便說一句,關鍵的調試症狀是System.Web.Http中的任何內容,WebApi使用該內容,並且不會顯示在MVC應用程序中。

+0

你說得對。我沒有意識到WebApi有一個單獨的路由文件。 – 2013-03-07 03:17:45