asp.net - 当 ASP.NET Core MVC 中存在带有星号模板的路由 {*url} 时,不会触发其他控制器
问题描述
我有一个 ASP.NET Core MVC Web 应用程序,我在其中配置了一个所谓的“默认”控制器来处理所有请求。控制器名称是FrontController
,它有唯一的动作叫做Index
。它的配置方式如下:
routes.MapAreaRoute(
name: "Front",
areaName: "Front",
template: "{*url}",
defaults: new { controller = "Front", action = "Index" }
);
所有请求都通过这个控制器。我需要配置自定义错误页面来处理内部服务器错误,为此我创建了一个ErrorController
应该处理请求的页面。ErrorController
有一个名为Error
. 路由在默认前端路由之前配置如下:
routes.MapRoute(
name: "error",
template: "{controller}/{action}",
defaults: new { },
constraints: new { controller = "Error", action = "Error" }
);
并在 Startup 中使用 `` 启用错误处理:
app.UseStatusCodePagesWithReExecute("/error", "?statusCode={0}");
问题是定义前端路由时不会触发错误控制器,即使错误路由是在前端路由之前定义的。
解决方案
您的路由具有包含两个部分{controller}/{action}
约束的模板,Error
这意味着请求 URL 中必须有一个控制器和一个名为 Error 的操作。您的错误定义说 go to /error
,它没有动作。因此这条路线不匹配。
将模板定义为 justerror
并将默认值定义为指向的默认值,ErrorController
并将操作定义为您想要的任何内容,然后仅在对 URL 完成请求时调用/error
,其他所有内容都将通过您的通配符。
推荐阅读
- javascript - 注销并登录 react-native-linkedin npm
- r - Colnames() 按行打印列名,我想要单列
- sql-server - 将现有的 MS-Access 数据库链接到 SQL Server
- kubernetes - 如何使用 consul 在 Kubernetes 中公开应用程序
- java - Jackson 将值转换为列表但返回 null
- kotlin - 无法在 Kotlin 的 Dagger2 中生成 DaggerAppComponent
- python - 用于 SCC 的 Kosaraju 算法,非递归
- python-3.x - 如何迭代窗口对象以将它们添加到 DataFrame?
- java - 任何语言的点正则表达式
- javascript - 当我必须遍历多个数据数组时,如何遍历 React 中的表格单元格和行?