我的应用程序中有一堆控制器,它们由默认的web api路由处理。现在我正在尝试处理控制器尚不存在的情况,但我真的对它的名字感兴趣。
所有现有和未来的控制器都具有相同的路径结构
api/{controller}/{id}
是否有办法捕获不存在的控制器名称,而不会阻止由控制器类型名称执行的默认api路由。
我当前的配置:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "Default Api",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "Missing Api",
routeTemplate: "api/{name}/{id}",
defaults: new
{
controller = "Missing",
name = RouteParameter.Optional,
id = RouteParameter.Optional
}
);
}
}
如果安排此命令,MissingController永远不会在运行时创建。如果我重新排序路线,将不会创建实际的控制器。
对于我来说,为丢失和现有控制器保留相同的URL非常重要,否则此更改将需要进行一些更改,并且(特别是)与前端开发人员进行不必要的通信。
怎么办?
答案 0 :(得分:2)
快速解决方案,手动列出您的控制器路线,然后捕获与缺失路线的不匹配。
但是,我认为最好的解决方案是使用异常处理程序
捕获缺少的控制器异常http://www.asp.net/web-api/overview/error-handling/exception-handling
答案 1 :(得分:1)
您可以尝试其他答案中提到的异常处理程序,或者您可以捕获api
特定404 Resource not found
错误并将其重定向到您丢失的控制器。
为此,请在web.config
<location path="api">
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/api/Missing" />
</httpErrors>
</system.webServer>
</location>
注意:您可能需要执行IISRESET。