ASP.NET MVC 3のUrlRewrite

8715 ワード

ASP.NET MVC 3に搭載されているUrl書き換えツールについて、今日は簡単な実現過程をご紹介します.
最後に実現する結果:都市のピンインを2級ドメイン名で伝達し、解析する.次の図に示します.
ステップ1:UrlProviderを作成するcsクラスファイル.そのクラスはルーティングベースクラスRouteBaseを継承します.
RouteBaseを継承するには、次の2つの方法が必要です.
public override RouteData GetRouteData(HttpContextBase httpContext)
{
    throw new NotImplementedException();
}

public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
    throw new NotImplementedException();
}

ここでは、上記の方法しか実現しません.
ステップ2:GetRouteDataメソッドの実装:
public override RouteData GetRouteData(HttpContextBase httpContext)
{
    string controller = "Home";
    string action = "Index";
    string id = "beijing";

    var data = new RouteData(this, new MvcRouteHandler()); //    RouteData,        
    data.Values.Add("controller", controller);
    data.Values.Add("action", action);

    //      url
    var url = httpContext.Request.Url;
    if (url == null)
    {
        data.Values.Add("id", id);
        return data;
    }

    string virtualPath = url.ToString();
    string param = virtualPath.Replace("http://", "").Split('.')[0];

    if (param.Equals("www"))
    {
        data.Values.Add("id", id);
        return data;
    }

    id = param;
    data.Values.Add("id", id);
    return data;
}

第3歩:ルーティングの書き換えの呼び出しを実現する;プロジェクトで自動的に生成するGlobalを開きます.asaxファイル、RegisterRoutesメソッドを変更するには:
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    // 【  】url         
    routes.Add(new UrlProvider());

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

}

ステップ4:ページ処理方法の作成;
public ActionResult Index(string id)
{
    switch (id)
    {
        case "beijing":
            ViewBag.CityName = "  ";
            break;

        case "shanghai":
            ViewBag.CityName = "  ";
            break;
    }

    string p1 = Request.QueryString["p1"];
    string p2 = Request.QueryString["p2"];

    ViewBag.P1 = p1;
    ViewBag.P2 = p2;

    return View();
}

ステップ5:IISでサイトを作成し、beijing、shanghaiなどのテストサイトアドレスをバインドします(本テストで私が使用したサイトアドレス:www.testurl.com、beijing.testurl.com、shanghai.testurl.comをバインドします).
ローカルテスト時にC:WindowsSystem 32driversetchostsファイルを設定する必要があります
ステップ6:テスト.
ブラウザにbeijingと入力testurl.com、効果は上図のようになります.