Url Helper路线与模板占位符

时间:2014-08-21 07:37:38

标签: asp.net-mvc asp.net-mvc-routing urlhelper

我想迭代表数据并在表格中对链接进行分析。

表格中的每一行都有类似方式的链接,其中散布着几个不同的ID。我想使用Url工厂为url路由生成模板。

例如

var urlHelper = new UrlHelper(HttpContext.Current.Request...);

 //code is a bit handwavy and may not compile
 var routeValues = new Dictonary<string,object>();
 routeData["action"] =  "myAction";
 routeData["controller"] =  "myAction";
 routeData["id1"] =  "{0}";
 routeData["id1"] =  "{2}";

 urlHelper.RouteUrl(routeValues);

MSDN REF UrlHelper.RouteUrl http://msdn.microsoft.com/en-us/library/dd505226(v=vs.118).aspx

我认为当我目前使用占位符时,它会对“{”符号进行编码,而我并没有真正解决它。我在项目网址中看到了一个“{”,所以我想避免解码这些问题。

我也非常希望避免放入myId1 = -9999,myId = -9999,myString =' - 9999'的解决方案,尽管如果它是nessecary,这是一个可接受的解决方案。

使用占位符生成路由有一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

这些是必须进行Url编码的特殊字符,因此Url Helper方法将始终对这些字符进行编码。解决方法可能是Url使用占位符解码生成的URL。然后你需要进行任何替换,自己手动url编码值!

像这样生成网址模板(或使用任何其他UrlHelper方法而不是Url.RouteUrl):

var routeValues = new RouteValueDictionary();
routeValues["action"] = "myAction";
routeValues["controller"] = "myAction";
routeValues["id1"] = "{0}";

var urlTemplate = HttpUtility.UrlDecode(Url.RouteUrl(routeValues));

这将生成(使用MVC中的默认路由)url模板/myAction/myAction?id1={0}。然后在替换占位符时,您需要自己对字符串值进行url编码:

String.Format(urlTemplate, HttpUtility.UrlEncode("123"))

哪会产生/myAction/myAction?id1=123

我会小心这种方法,因为您需要手动将值转换为字符串并对其进行编码。这也假设您的网址模板中的硬编码值如myAction是安全的,并且不需要进行网址编码(因为我们正在解码生成的网址)。