ASP.NET MVC3 中的UrlRewrite

来源:互联网 发布:vue双向数据绑定原理 编辑:程序博客网 时间:2024/05/16 04:56

ASP.NET MVC3中自带的Url重写工具,今天和大家一起分享一下简单的实现过程。

最后要实现的结果:以二级域名的形式传递城市拼音并解析。如下图所示:

第一步:创建一个UrlProvider.cs类文件,其类要继承路由基类RouteBase。

继承RouteBase后需要实现两个方法:

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

在这里,我们只实现上面的方法。

第二步:实现 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;}

第三步:实现路由重写的调用;
打开项目中自动生成的 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    );}

第四步:编写页面处理方法;

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();}

第五步:在IIS上创建站点,绑定beijing、shanghai等测试站点地址(本测试中我使用的站点地址:www.testurl.com,绑定beijing.testurl.com、shanghai.testurl.com)。

在本地测试时需要配置 C:\Windows\System32\drivers\etc\hosts 文件

第六步:测试。

在浏览器中输入beijing.testurl.com,效果将如上图所示。

 

 

 

 

 

 

 

 

 


<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击