2013-03-07 123 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