2012-02-21 15 views
0

私のルート:ようasp.net mvc3ルートで対処する方法 "+"?

routes.MapRoute(
    "Tag", 
    "tag/{t}/{action}", 
    new { controller = "tag", action = "unsolved" } 
    ); 

リンク:

<a href="/tag/@(Uri.EscapeDataString(tagName))/unsolved">@tagName</a> 

tagNameを、すべてが「http://www.test.com/のように、他に、うまく機能し、 "+" が含まれていない場合+ ")) "2Bは(Uri.EscapeDataString(@から来る(%" タグ/ Cの%2B%2Bの/未解決、私はエラーを取得:?!HTTPエラー404.11 - 私を助けることができる

が見つかりませんおかげ

答えて

4

あなたは私はあなたがビジュアルでIIS 7でのみ、この問題を持つとされていないと思われる二重あなたのweb.configファイルの<system.webServer>セクションに脱出できるように試みることができます(ところで、あなたの質問に言及しているはずです)Studio開発サーバー:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <security> 
     <requestFiltering allowDoubleEscaping="true"/> 
    </security> 
</system.webServer> 

さらに読書:何らかの理由でhttp://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

+0

は、私はweb.configファイルを変更することができませんでした、他のソリューションを持っているのですか? – artwl

+1

@artwl、no。この場合、この文字を別の文字に置き換える必要があります。 Webサーバーは、あなたがそれを使用することを許可しません。もう一つの可能​​性は、パス部分に入れるのではなく、タグのために( '/ tags/unsolved?tag = ...'のような)クエリ文字列パラメータを使うことです。 –

+0

Thx @Darin、私はIISとCasiniの間に違いがあることを知らなかった。ちょうど私に時間を節約した。 – sisdog

0

MVC Webアプリケーション任意の文字(%、+、/など)を含むリンクを生成します。だから、URLの文字列をエンコードし、リンクを生成し使用します。

new UrlHelper(HttpContext.Current.Request.RequestContext) 
     .RouteUrl("Tag", 
       new { tagName= HttpContext.Current.Server.UrlEncode(tagName) }; 
関連する問題