【问题标题】:C# Web Api 2 How to redirect request to default controllerC# Web Api 2 如何将请求重定向到默认控制器
【发布时间】:2017-12-27 07:29:11
【问题描述】:

我遇到了一种情况,大部分请求将由专用控制器处理。

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

但可能存在根据 URL 找不到controller 的情况。喜欢api/this_controller_is_not_exists/GetStatus

如何将这些请求重定向到名为 default 的默认控制器并使用默认控制器内的操作处理此请求? 默认控制器的有效请求类似于api/default/GetStatus

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

'api/this_controller_exist/GetStatus'

无效:

'api/this_controller_not_exists/GetStatus'

【问题讨论】:

  • defaultController 是做什么的?
  • @ChetanRanpariya :它包含默认操作,其中 'this_controller_not_exists' 可用作参数以使用默认逻辑进行进一步处理。
  • 作为一种解决方法,您可以处理 404 错误并手动重定向到默认控制器
  • 您可以通过编写自定义错误处理程序来处理此问题,如果未找到传递的控制器,它将重定向到默认控制器。您还可以编写自定义控制器工厂,如果未传递传递的控制器,它将注入 DefaultController。但我不明白你为什么需要这个功能。您实际上是在为攻击开放您的 API,其中针对您的 API 域的任何 URL 都将转到默认控制器并返回响应。这可能导致 DOS 攻击。

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


【解决方案1】:

如果您有一个名为 default 的默认路由映射,并且如果您的控制器确实存在,那么它将自动将请求映射到您的控制器 this_controller_exist,因为在请求的 URI 通过 RouteData 之后,它将被馈送到HttpControllerSelector 将尝试使用反射让您的 API 项目中的所有控制器继承自 ApiController。因此,如果您问题中的控制器确实存在并且源自ApiController,那么只要您在WebApiConfig 中有一个默认路由映射,它就不会成为问题,否则如果没有找到,它将求助于 IIS 资源处理,这将结束抛出 404 resource not found 错误。

【讨论】:

  • 谢谢,您实际上为我指出了一个解决方案。正如你所说,它应该默认使用Default controller 我已经开始寻找为什么它不适合我。我发现我的default controller class 不能是abstract class。所以我现在使用的是DefaultClass : MyBaseClass 而不是abstract DefaultClass : ApiController,其中MyBaseClassabstract MyBaseClass : ApiController
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
相关资源
最近更新 更多