实现属性路由

时间:2018-11-24 21:12:05

标签: c# asp.net-mvc routing asp.net-mvc-routing

我正在尝试处理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中设置),那么当这两个地方相互矛盾时会发生什么?

1 个答案:

答案 0 :(得分:0)

如果删除扩展名.xml,则属性路由将正常运行。并且最好在操作方法中使用与扩展相关的代码。

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

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