实现属性路由



我正在尝试了解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时,我会得到一个未找到页面的错误。

问题:

  1. 要使路由属性工作,我缺少哪些步骤
  2. 既然映射现在可以在两个地方指定(作为属性或直接在RouteCollection中设置(,那么当这两个地方相互矛盾时会发生什么

如果删除扩展.xml,属性路由将完美工作。最好使用与扩展相关的代码在操作中的方法。

还要确保您的路由配置看起来像(routes.MapMvcAttributeRoutes((;应存在于默认路由之前(

routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
);

最新更新