我正在尝试了解MVC中的属性路由。
最初,我的站点地图控制器的路线如下:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "SitemapXml",
url: "sitemap.xml",
defaults: new { controller = "Sitemap", action = "Index" }
// Additional mappings...
}
}
这很好。但后来我尝试注释掉上面的SitemapXml
路由,而是在控制器中添加一个属性。
// GET: Sitemap
[Route("sitemap.xml")]
public ActionResult Index()
{
// Generate sitemap
}
我还在RegisterRoutes
的末尾添加了以下行:
routes.MapMvcAttributeRoutes();
但现在,当我导航到domain.com/sitemap.xml时,我会得到一个未找到页面的错误。
问题:
- 要使路由属性工作,我缺少哪些步骤
- 既然映射现在可以在两个地方指定(作为属性或直接在
RouteCollection
中设置(,那么当这两个地方相互矛盾时会发生什么
如果删除扩展.xml,属性路由将完美工作。最好使用与扩展相关的代码在操作中的方法。
还要确保您的路由配置看起来像(routes.MapMvcAttributeRoutes((;应存在于默认路由之前(
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
);