【问题标题】:Url Helper route with template placeholderse带有模板占位符的 Url Helper 路由
【发布时间】:2014-10-14 18:10:23
【问题描述】:

我想遍历表数据并在表中填充链接。

表格中的每一行都有类似样式的链接,其中散布着几个不同的 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

我认为当我目前使用占位符时,它会编码“{”符号,而我还没有真正解决它。我在我们的项目 url 中看到了一个“{”,所以我想避免解码这些字符。

我也强烈希望避免使用 myId1 = -9999, myId=-9999, myString='-9999' 的解决方案,尽管如果必要的话,这是一个可以接受的解决方案。

有没有一个很好的解决方案来生成带有占位符的路线?

【问题讨论】:

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


    【解决方案1】:

    这些是必须进行 Url 编码的特殊字符,因此 Url Helper 方法将始终对这些字符进行编码。解决方法可能是使用占位符对生成的 url 进行 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 这样在您的url 模板中硬编码的值是安全的,不需要进行url 编码(因为我们正在解码生成的url)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-21
      • 2018-07-18
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      • 2015-05-10
      • 2011-01-31
      相关资源
      最近更新 更多