带有“文件扩展名”的ASP.NET MVC路由

时间:2008-11-01 18:04:23

标签: asp.net-mvc

我想为新闻列表制作MVC路线,可以多种格式提供。

  • 新闻 - > (X)HTML
  • news.rss - > RSS
  • news.atom - > ATOM

是否可以通过一条路线执行此操作(在我计划的设计中,在一些地方出现更为一般的“可选扩展”情况)?或者我需要制作两条这样的路线:

routes.MapRoute("News-ImplicitFormat",
                "news",
                new { controller = "News", action = "Browse", format = "" });

routes.MapRoute("News-ExplicitFormat",
                "news.{format}"
                new { controller = "News", action = "Browse" });

让路由系统支持如下内容似乎很有用:

routes.MapRoute("News",
                "news(.{format})?",
                new { controller = "News", action = "Browse" });

2 个答案:

答案 0 :(得分:12)

我提出了一种方法来支持如下所示添加对:

public static void MapRouteWithOptionalFormat(this RouteCollection routes,
                                              string name,
                                              string url,
                                              object defaults)
{
    Route implicitRoute = routes.MapRoute(name + "-ImplicitFormat",
                                          url,
                                          defaults);
    implicitRoute.Defaults.Add("format", string.Empty);

    Route explicitRoute = routes.MapRoute(name + "-ExplicitFormat",
                                          url + ".{format}",
                                          defaults);
}

答案 1 :(得分:0)

您可以考虑使用约束来使其适用于正常路线。

更新:实际上,我误解了这个问题。另一个答案是现在要做的正确的事情。或者创建自定义路线。我们正在考虑将可选细分作为未来可能的功能。