保留的 ASP.NET MVC 控制器名称?

3

我刚刚花费了一小时来调试,尝试解决我遇到的问题:客户端显示404错误,服务器返回System.Web.Http.HttpResponseException异常,提示是在System.Web.Http.dll!System.Web.Http.Dispatcher.DefaultHttpControllerSelector.SelectController(System.Net.Http.HttpRequestMessage request) + 0x33f byte处出现的;无论我尝试了什么方法,我的ApiController派生类都无法接收请求。

最终,我试图将其转换为常规的Controller,但没有效果。突然想到,只需将名称从APIController更改为APIXController即可使一切正常。

  1. 哪里说明了API是保留的控制器名称?
  2. 完整的保留控制器名称列表在哪里?
  3. 是否有可能绕过使用APIController作为类名的限制,如果可以,如何操作?

我检查的第一件事是我的路由配置,这是标准设置:

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

3

APIController不是保留名称。但是,如果您使用标准的MVC4模板,则默认情况下会包含WebAPI堆栈的实例,并且这将注册一个以/api开头的路由。

您最有可能遇到了这个问题。

请查看AppStart和WebApiConfig.cs文件。

顺便说一句,关键的调试症状是System.Web.Http中的任何内容,它被WebApi使用,并且不会出现在MVC应用程序中。


你说得对。我没有意识到WebApi有一个单独的路由文件。 - Mahmoud Al-Qudsi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接