zoukankan      html  css  js  c++  java
  • ASP.NET MVC3 中的UrlRewrite

    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,效果将如上图所示。

  • 相关阅读:
    JS函数防抖与函数节流
    AJAX问题 XMLHttpRequest.status = 0是什么含义
    通过JS如何获取IP地址
    关于URL编码
    报错Unexpected token u
    css文本超出2行就隐藏并且显示省略号
    At_speed_test
    Logic Bist Arch
    Logic BIST
    DMA-330(二)
  • 原文地址:https://www.cnblogs.com/judgelee/p/2955524.html
Copyright © 2011-2022 走看看