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 エラー 400、Bad request が表示されます。何らかの方法でエリアパラメーターをエンコードする必要があると思いますが、その方法がわかりません。どんな助けでも大歓迎です。

ありがとう!

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 に答える