1

古い ASP.NET WebForms アプリを ASP.NET MVC 4 に変換しています。特定の URL との下位互換性を維持する必要があることを除いて、すべて問題ありません。UrlRewrite の使用に関するこの素晴らしい投稿を見つけましたが、残念ながらそれは当てにできるものではありません (このアプリは多くのサーバーに展開されます)。最後の部分で、対処する URL のセットが少ない場合にルーティングを使用することについて言及していますが、例は示していません。

対処するURLが1つしかないので、ルーティングが簡単なアプローチだと思いますが、デフォルトルート以外を扱ったことがない/Controller/Action/{id}ので、解決策を探しています

  1. 外部依存関係がない
  2. 古いくだらないブラウザで動作します
  3. 私のアプリがこの古い URL を知っているかどうかは問題ではありません

古い URI

https://www.mysite.com/default.aspx?parm1=p1&parm2=p2&etc=soforth

新しい URI

https://www.mysite.com/Home/Index/?parm1=p1&parm2=p2&etc=soforth

背景: このアプリは、さまざまな場所にある多数のサーバーにデプロイされます。Webブラウザーコントロールに「古いURI」を表示する他のアプリ(更新できない)があるため、アプリがasp.net mvcに更新された後も引き続き動作する必要があります。

4

2 に答える 2

4

次のようなものが機能するはずです (テストされていないため、このルートを最初のルートの 1 つにする必要がある場合があります)。

routes.MapRoute(
   "legacyDefaultPage",
   "default.aspx",
   new {Controller = "Legacy", Action="Default"});

class LegacyController {
  ActionResult Default (string param1,...){}
}
于 2013-01-17T23:18:10.087 に答える
0

試してみることができるのは、MVC アプリでルートに到達する直前に実行される httpModule を作成することです。

http モジュールでは、seo が重要な場合は301 または 302 リダイレクトを実行できます。これにより、レガシーから新しいアプリにすべてのパラメーターをより柔軟に変換できます。

public class RecirectionModule :IHttpModule{
    public void Init(HttpApplication context)
    {
        _context = context;
        context.BeginRequest += OnBeginRequest;
    }

    public void OnBeginRequest(object sender, EventArgs e)
    {
        string currentUrl = HttpContext.Current.Request.Url.AbsoluteUri;
        string fileExtention = Path.GetExtension(currentUrl);
        string[] fileList= new[]{".jpg",".css",".gif",".png",".js"};

        if (fileList.Contains(fileExtention)) return;

        currentUrl = DoAnyTranformation(currentUrl);
        Redirect(currentUrl);

    }

    private void Redirect(string virtualPath)
    {
        if (string.IsNullOrEmpty(virtualPath)) return;
        _context.Context.Response.Status = "301 Moved Permanently";
        _context.Context.Response.StatusCode = 301;
        _context.Context.Response.AppendHeader("Location", virtualPath);
        _context.Context.Response.End();
    }

    public void Dispose()
    {

    }

}

新しいアプリケーションでパラメーター リストを変更する必要があり、多くのルートを処理する必要がある場合は、リダイレクトを行うことがよりクリーンなソリューションになる可能性があると思います。

于 2013-01-18T04:31:09.257 に答える