我注册了以下路线;
routes.MapRoute(
"LocationsByArea",
"Locations/{system}/{storage}/{area}",
new { controller = "StorageLocation", action = "Index" },
null
);
...以及我视图中的以下代码;
<%= Html.ActionLink("Platser", "Index", "StorageLocation", new { system = Model.System, storage = Model.Storage, area = item.Name }, null)%>
我的问题是当“area = item.Name”包含冒号时,例如“区域4:1”。如果我单击渲染的链接,我会收到HTTP错误400,Bad reqest。我想我必须以某种方式编码我的区域参数,但我无法弄清楚如何。任何帮助都是相关的。
谢谢!
答案 0 :(得分:1)
内置编码/解码不起作用,所以我建议你自己滚动,如下所示:
namespace MyProject.Helpers
{
public static class JobNameHelper
{
public static string JobNameEncode(string jobname)
{
return jobname.Replace(":", "---colon---");
}
public static string JobNameDecode(string jobname)
{
return jobname.Replace("---colon---", ":");
}
}
}
答案 1 :(得分:0)
你能不能只使用
Server.UrlEnconde(item.Name)
或者我错过了什么?
在您的路由中,您可能还必须使用Server.UrlDecde
,但我认为它应该根据您的要求解码。
尝试使用Routing Debugger来查看url路由器通过的内容,然后您可以看到解码需要发生的位置
答案 2 :(得分:0)
ASP.NET 3.5 SP1及更早版本对哪些URL有效有许多限制。在ASP.NET 4中,大多数这些问题都已得到修复(或者至少可以通过web.config进行自定义)。我认为由于安全问题,即使在编码时,冒号字符也可能不允许在ASP.NET 3.5 SP1及更早版本中使用。在执行文件检查时允许冒号可能是一个安全问题,因为它们是NTFS Alternate Data Streams的鲜为人知的语法。
为了这些目的,我建议尝试选择冒号以外的字符。也许逗号,分号或等号可能会起作用吗?