C#Web Api 2如何将请求重定向到默认控制器

时间:2017-07-21 09:44:36

标签: c# asp.net asp.net-web-api routing asp.net-web-api2

我的情况是大多数请求都会使用专用控制器进行处理。

    config.Routes.MapHttpRoute(
            name: "DataApi",
            routeTemplate: "api/{controller}/{action}",
            defaults: new
            {
                controller = "default"
            }
    );

但可能会出现根据网址找不到controller的情况。与api/this_controller_is_not_exists/GetStatus一样。

如何将这些请求重定向到名为default的默认控制器,并使用默认控制器内的操作处理此请求? 对默认控制器的有效请求看起来像api/default/GetStatus

对于有效和无效的请求,路由将没有太大区别。 有效的:

'api/this_controller_exist/GetStatus'

无效:

'api/this_controller_not_exists/GetStatus'

1 个答案:

答案 0 :(得分:1)

如果您有一个名为default的默认路由映射,并且您的控制器确实存在,那么它会在请求的URI通过{{1}后自动将请求映射到您的控制器this_controller_exist } RouteData将会尝试让您的API项目中的所有控制器都使用反射从HttpControllerSelector继承。因此,如果您问题中的控制器确实存在并且派生自ApiController,那么如果您在ApiController中有默认路由映射,则它不会成为问题,否则如果找不到它将诉诸于IIS资源处理最终会导致404 WebApiConfig错误。