我已经注册了以下路线;
routes.MapRoute(
"LocationsByArea",
"Locations/{system}/{storage}/{area}",
new { controller = "StorageLocation", action = "Index" },
null
);在我的视图中...and下面的代码;
<%= Html.ActionLink("Platser", "Index", "StorageLocation", new { system = Model.System, storage = Model.Storage, area = item.Name }, null)%>我的问题是当"area = item.Name“包含冒号时,例如“区域4:1”。如果我单击呈现的链接,我会得到HTTP-error 400,Bad reqest。我想我必须以某种方式对我的面积参数进行编码,但我不知道如何编码。任何帮助都会被删除。
谢谢!
发布于 2010-09-06 19:58:02
内置的编码/解码不起作用,所以我建议你使用自己的,如下所示:
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---", ":");
}
}
}发布于 2009-11-30 19:58:35
你能不能不用
Server.UrlEnconde(item.Name)还是我错过了什么?
在您的路由中,您可能还必须使用Server.UrlDecde,尽管我认为它应该在请求时为您解码。
尝试使用Routing Debugger查看传递给url路由器的是什么,然后您就可以知道解码需要在哪里进行
发布于 2009-12-02 02:38:46
ASP.NET 3.5 SP1及更早版本对URL的有效性有许多限制。在ASP.NET 4中,这些问题中的大多数已经修复(或者至少可以通过web.config进行自定义)。我认为,出于安全考虑,冒号字符在ASP.NET 3.5 SP1和更早版本中可能是不允许的。在执行文件检查时,允许冒号可能是一个安全问题,因为冒号是一种鲜为人知的NTFS Alternate Data Streams语法。
出于这些目的,我建议尝试选择冒号以外的字符。也许可以用逗号、分号或等号代替?
https://stackoverflow.com/questions/1819368
复制相似问题