2015-05-09 75 views
2

我試圖以編程方式將查詢字符串映射到我在RouteConfig.cs文件中創建的SEO友好路由URL,但似乎很難。從RouteData生成格式化的友好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}"} 
); 

而且我能夠檢索正確的RouteData對象,像這樣:

string url = "~/ReviewPost/Detail/?year=2015&month=05&filename=review-title"; 
RouteData routeData = RouteDataUtils.RouteByUrl(myUrl); 

但是我有困難,搞清楚如何產生該網址應該看起來像我的配置(/2015/05/review-title/)中指定的網址。

RouteData對象是否能夠創建上述格式化URL的實例,還是我必須自己設置格式?或者,MVC框架是否有一個使用RouteData對象正確格式化URL字符串的類?

任何幫助,將不勝感激。

+0

只是要說清楚:你說當你嘗試URL涉及ReviewPost/Detail/2015/5/review-title時,它目前不工作? – DWright

+0

該URL正在工作。我試圖以編程方式將未格式化的查詢字符串('〜/ ReviewPost/Detail /?year = 2015&month = 5&filename = review-title')轉換爲我的配置中的格式化查詢字符串('/ 2015/05/review-title/')。爲了清晰起見,我剛剛更新了答案。 –

回答

1

更新

試試這樣說:

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

嘗試是這樣的:

var urlHelper = new UrlHelper(); 
var theUrl = urlHelper.RouteUrl("ReviewPost",routeData.Values); 

注意第一個參數t o RouteUrl是您的路線名稱 - 即。你如何在MapRoute中命名它。

+0

謝謝您的回答,但我無法訪問Route的名稱。由於我以編程方式進行此操作,因此我只能填寫完整的網址。 –

+0

還有其他版本的方法。嘗試使用路由data.values調用。只是一個參數。 – DWright

+0

查看對帖子的更新。 – DWright