7

いくつかのレガシーURLをサポートし、それらをコントローラーアクションにマップしようとしています。URLは次のようになります。

/~Home+Office~Note+Pads.html

これが私のルートです:

routes.MapRoute(
    "LegacyCategory",
    "{path}.html",
    new { controller = "LegacyCI", action = "Index", }
);

これらに対処するための私のコントローラー(の始まり)は次のとおりです。

public class LegacyCIController : Controller {
    public ActionResult Index(string path) {
        if (path == "~Address+Labels") {
            return RedirectToAction("Display", "Category", new { id = "AddressLabels" });
        }       
        return RedirectToAction("Index", "Category"); 
    }
}

LegacyCIControllerにブレークポイントを設定し、スタートページをXXX.htmlに設定すると、ブレークポイントがヒットし(そして失敗しif)、寿命は良好です。しかし、スタートページをに設定しようとすると~Address+Labels.html、ブレークポイントはヒットせず、Chromeは「おっと、このページは壊れているようです」というページを表示します。

このページは、Visual Studioではなく、自分のマシンのIIS7で実行しています。

このURLは非常に不正な形式であるため、通常のMVCルートでも処理できませんか、それとも他の何か間違ったことをしていますか?

4

2 に答える 2

5

デフォルトでは、IIS7+はパスにaが含まれるURL(エラー404.11)をブロックします。これをオーバーライドするには、次をオンにallowDoubleEscapingweb.configます。

  <system.webServer>
    <security>
      <requestFiltering allowDoubleEscaping="true">
      </requestFiltering>
    </security>
  </system.webServer>

ただし、IISブログで説明されているように、このオプションは潜在的なセキュリティホールを開くため、使用する際は少し注意してください。

http://blogs.iis.net/thomad/archive/2007/12/17/iis7-rejecting-urls-taining.aspx

于 2012-04-20T22:39:00.690 に答える
0

を使用してみてくださいHandleUnknownAction。コントローラ内:

protected override void HandleUnknownAction( string actionName ) {
  if( Request.Path == "/~Address+Labels.html" ) {
    RedirectToAction( "Display", "Category" ).ExecuteResult( ControllerContext );
  } else {
    base.HandleUnknownAction( actionName );
  }
}
于 2012-04-20T21:21:19.983 に答える