我有一个新的ASP.NET Core Web应用程序,其路由定义如下:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "sitemap",
defaults: new { controller = "Sitemap", action = "Index" },
template: "sitemap.xml");
routes.MapRoute(
name: "cms",
template: "{*permalink}",
defaults: new { controller = "Content", action = "Index" },
constraints: new { permalink = new CmsRouteConstraint() });
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
当我请求网址/
时,我看到我的主页由HomeController
提供。当我请求网址/sitemap.xml
时,我会看到SitemapController
提供的XML。当我请求Match
中的CmsRouteConstraint
方法返回true
的网址时,我看到请求由ContentController
处理。
但是,所有其他网址都返回404响应。根据我的理解,这些网址仍应由我的默认路由处理并传递给HomeController
,但他们并非如此。我觉得奇怪的是,无论我是否请求网址/
或/where/am/i
,我都可以看到CmsRouteConstraint
两次都返回false
,那么为什么前者最终会被处理HomeController
而不是后者?
答案 0 :(得分:1)
你需要使用你拥有的东西。如果您想要拨打电话/yolo/swag
,可以通过deafult
路由处理,但您没有yolo
控制器并执行swag
操作,并且会返回404
还要记住*
路线中的cms
及其全部路线功能,以便我在路线表末尾使用“贪婪匹配”