带有模板占位符的 Url Helper 路由
Posted
技术标签:
【中文标题】带有模板占位符的 Url Helper 路由【英文标题】:Url Helper route with template placeholderse 【发布时间】: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' 的解决方案,尽管如果必要的话,这是一个可以接受的解决方案。
有没有一个很好的解决方案来生成带有占位符的路线?
【问题讨论】:
【参考方案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)。
【讨论】:
以上是关于带有模板占位符的 Url Helper 路由的主要内容,如果未能解决你的问题,请参考以下文章
iOS 13 - 带有占位符的 UITextField 让应用程序崩溃
文件名(在 Windows 上)和 URL 中用作占位符的最佳字符是啥?