ASP.NET MVC 3のUrlRewrite
8715 ワード
ASP.NET MVC 3に搭載されているUrl書き換えツールについて、今日は簡単な実現過程をご紹介します.
最後に実現する結果:都市のピンインを2級ドメイン名で伝達し、解析する.次の図に示します.
ステップ1:UrlProviderを作成するcsクラスファイル.そのクラスはルーティングベースクラスRouteBaseを継承します.
RouteBaseを継承するには、次の2つの方法が必要です.
ここでは、上記の方法しか実現しません.
ステップ2:GetRouteDataメソッドの実装:
第3歩:ルーティングの書き換えの呼び出しを実現する;プロジェクトで自動的に生成するGlobalを開きます.asaxファイル、RegisterRoutesメソッドを変更するには:
ステップ4:ページ処理方法の作成;
ステップ5:IISでサイトを作成し、beijing、shanghaiなどのテストサイトアドレスをバインドします(本テストで私が使用したサイトアドレス:www.testurl.com、beijing.testurl.com、shanghai.testurl.comをバインドします).
ローカルテスト時にC:WindowsSystem 32driversetchostsファイルを設定する必要があります
ステップ6:テスト.
ブラウザにbeijingと入力testurl.com、効果は上図のようになります.
最後に実現する結果:都市のピンインを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、効果は上図のようになります.