C# 从RouteData生成格式化的友好URL

C# 从RouteData生成格式化的友好URL,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我试图以编程方式将查询字符串映射到我在RouteConfig.cs文件中创建的SEO友好路由URL,但似乎很难实现 我的路由配置如下所示: routes.MapRoute( name: "ReviewPost", url: "{year}/{month}/{filename}/", defaults: new {controller = "ReviewPost", action = "Detail"}, namespaces: new[] {"Applicatio

我试图以编程方式将查询字符串映射到我在
RouteConfig.cs
文件中创建的SEO友好路由URL,但似乎很难实现

我的路由配置如下所示:

routes.MapRoute(
    name: "ReviewPost",
    url: "{year}/{month}/{filename}/",
    defaults: new {controller = "ReviewPost", action = "Detail"},
    namespaces: new[] {"ApplicationName.Website.Controllers"},
    constraints: new {year = @"\d{4}", month = @"\d{2}"}
);
var urlHelper = new UrlHelper();
var theUrl = urlHelper.RouteUrl("ReviewPost",routeData.Values);
我能够检索正确的
RouteData
对象,如下所示:

string url = "~/ReviewPost/Detail/?year=2015&month=05&filename=review-title";
RouteData routeData = RouteDataUtils.RouteByUrl(myUrl);
但是,我很难弄清楚如何生成友好的URL,该URL应该与我的配置中指定的URL类似(
/2015/05/review title/

RouteData
对象是否能够创建上述格式化URL的实例,或者我必须自己格式化它?或者MVC框架是否有一个使用
RouteData
对象正确格式化URL字符串的类


任何帮助都将不胜感激。

更新

试着这样做:

var urlHelper = new UrlHelper();
var theUrl = urlHelper.RouteUrl(routeData.Values);
原创

试着这样做:

routes.MapRoute(
    name: "ReviewPost",
    url: "{year}/{month}/{filename}/",
    defaults: new {controller = "ReviewPost", action = "Detail"},
    namespaces: new[] {"ApplicationName.Website.Controllers"},
    constraints: new {year = @"\d{4}", month = @"\d{2}"}
);
var urlHelper = new UrlHelper();
var theUrl = urlHelper.RouteUrl("ReviewPost",routeData.Values);

请注意,
RouteUrl
的第一个参数是您的路线名称,即您在
MapRoute

中对其命名的方式。请明确:您是说,当您尝试涉及ReviewPost/Detail/2015/5/review title的url时,它当前不起作用?url正在起作用。我正试图以编程方式将未格式化的查询字符串(
~/ReviewPost/Detail/?year=2015&month=5&filename=review title
)转换为配置中的格式化查询字符串(
/2015/05/review title/
)。为了清楚起见,我刚刚更新了我的答案。谢谢你的回答,但是我将无法访问路线的名称。当我以编程方式执行此操作时,我将只能使用完整的URL。该方法还有其他版本。尝试仅使用route data.values调用。就这一个参数。谢谢,我在电脑前会试试的。第二步怎么样?对不起,我一直想给你回复。它做得很好!看起来我的路线也很难将月份(05)解析为整数。我一把它改成字符串,它就开始按预期工作了。谢谢你的帮助!