我想为一个新闻列表制作一个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" });
我做了一个支持添加如下对的方法,如下所示:
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);
}
我做了一个支持添加如下对的方法,如下所示:
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);
}
您可以考虑使用约束来使其适用于正常路由。
更新:实际上,我误解了这个问题。另一个答案是现在要做的正确的事情。或者创建自定义路线。我们正在考虑将可选段作为未来可能的功能。