2

我注册了以下路线;

        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”包含冒号时,例如“Area 4:1”。如果我单击呈现的链接,我会收到 HTTP-error 400,Bad reqest。我想我必须以某种方式对我的区域参数进行编码,但我不知道如何。任何帮助都将不胜感激。

谢谢!

4

3 回答 3

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---", ":");
        }

    }
}
于 2010-09-06T11:58:02.070 回答
0

ASP.NET 3.5 SP1 及更早版本对哪些 URL 有效有许多限制。在 ASP.NET 4 中,大多数这些问题都已得到修复(或者至少可以通过 web.config 进行自定义)。我认为,出于安全考虑,冒号字符,即使在编码后,在 ASP.NET 3.5 SP1 及更早版本中也可能不允许使用。在执行文件检查时,允许冒号可能是一个安全问题,因为它们是NTFS 备用数据流的一种鲜为人知的语法。

出于这些目的,我建议尝试选择冒号以外的字符。也许逗号、分号或等号可能会起作用?

于 2009-12-01T18:38:45.563 回答
0

你能不能只用

Server.UrlEnconde(item.Name)

还是我错过了什么?

在您的路由中,您可能也必须使用Server.UrlDecde它,尽管我认为它应该根据要求为您解码。

尝试使用Routing Debugger查看 url 路由器传递了什么,然后您可以看到需要在哪里进行解码

于 2009-11-30T11:58:34.683 回答