【发布时间】: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