.NET MVC3.0 伪静态实现

关于.NET MVC的伪静态实现,网上有很多博文介绍,但都不能实现真正的伪静态,或者适应更复杂的伪静态需求,比如分页查询的页面。

首先,我们要写一个路由拦截器,其中的一些拦截规则处理,需要你根据实际情况处理,我这里只是扩展了分页查询的伪静态处理,代码如下:

    /// <summary>
    /// 路由拦截器
    /// 作者:Maximus Ye
    /// Email:[email protected]
    /// QQ:275623749
    /// </summary>
    public class MVCHtmlRoute : RouteBase
    {
        public MVCHtmlRoute()
        {

        }

        public override RouteData GetRouteData(HttpContextBase httpContext)
        {
            RouteData result = null;
            string requestedURL =
                httpContext.Request.AppRelativeCurrentExecutionFilePath + httpContext.Request.PathInfo;
            List<string> URLItemList = requestedURL.Split('/').ToList();
            if(URLItemList.Count()==3)
            {//缺Action
                int extpos = URLItemList[2].IndexOf(".html");
                int pagepos = URLItemList[2].IndexOf("_");
                if (extpos > 0)
                {
                    result = new RouteData(this, new MvcRouteHandler());
                    result.Values.Add("controller", URLItemList[1]);
                    result.Values.Add("action", "Index");
                    if (pagepos > 0)
                    {//分页参数分割
                        result.Values.Add("id", URLItemList[2].Substring(0, pagepos));
                        result.Values.Add("page", URLItemList[2].Substring(pagepos + 1, extpos - pagepos-1));
                    }
                    else
                    {
                        result.Values.Add("id", URLItemList[2].Substring(0, extpos));
                    }
                }
            }
            return result;
        }

        public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
        {
            return null;
        }

    }

然后在Global.asax的RegisterRoutes方法中添加我们的拦截器,并添加其他伪静态规则,代码如下:

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.Add(new Lib.MVCHtmlRoute());

            routes.MapRoute(
                "ID_PAGEHtml", // id伪静态 扩展分页参数page
                "{controller}/{action}/{id}_{page}.html",// 带有参数的 URL
                new { controller = "Home", action = "Index", id = UrlParameter.Optional, page = UrlParameter.Optional }// 参数默认值
            );

            routes.MapRoute(
                "IDHtml", // id伪静态
                "{controller}/{action}/{id}.html",// 带有参数的 URL
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }// 参数默认值
            );

            routes.MapRoute(
                "ActionHtml", // action伪静态
                "{controller}/{action}.html/{id}",// 带有参数的 URL
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }// 参数默认值
            );

            routes.MapRoute(
                "ControllerHtml", // controller伪静态
                "{controller}.html/{action}/{id}",// 带有参数的 URL
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }// 参数默认值
            );
            //以下保证未做伪静态处理的链接也能正常识别
            routes.MapRoute(
               "Default",
               "{controller}/{action}/{id}",
               new { controller = "Home", action = "Index", id = UrlParameter.Optional }// 参数默认值
            );

            routes.MapRoute(
                "Root",
                "",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional });//根目录匹配
        }

好了,以上要弄的都弄好了,具体的伪静态效果,可以访问:www.etagrfid.com查看。

转载请注明出处,谢谢!

时间: 2024-11-03 13:42:56

.NET MVC3.0 伪静态实现的相关文章

分享在MVC3.0中使用jQuery DataTable 插件

前不久在网络上看见一个很不错的jQuery的DataTable表格插件.后来发现在MVC中使用该插件的文章并不多.本文将介绍在MVC3.0如何使用该插件.在介绍该插件之前先简单介绍一下,推荐该插件的原因.在项目中我使用jqgrid比较多.但是发现当进行样式调整时jqgrid的样式常常会让美工头疼.而datatable插件却是一个轻量级的jQuery插件.当我通过浏览器查看该js插件rander后的源码.发现只是一个简单的html table,非常简洁.那么在没有特殊要求的情况下使用这个插件,开发

MVC2.0==&gt;MVC3.0

总结出如下4个MVC3.0和2.0的重要区别. 1. @ 符号在 View 页面中的用法: C#代码以 @符号开头,例如 1 <h2>Name: @Model.Name</h2>2 3 以及4 5 @if (Model.Category == "Watersports") { 6 <p>@Model.Category <b>Splash!</b> </p> 7 } 如果你的代码中不是以 html 标记开头,也就是说

asp.net mvc3.0第一个程序helloworld开发图解

步骤一:新建asp.net mvc3.0项目 (选择Razor模板) 步骤二:创建控制器 步骤三:控制器源码内右键创建对应视图 步骤四:控制器内添加代码 步骤五:视图页面输出内容 步骤六:F5调试

Asp.Net MVC3.0中防止跨站的POST

在Form中添加 @Html.AntiForgeryToken(); 在后台的Action中增加 [ValidateAntiForgeryToken] 这个方法还可以添加自定义的参数 @Html.AntiForgeryToken("SaltValue"); 后台的Action中,必需指名Token的值才允许正常提交. [ValidateAntiForgeryToken Salt=("SaltValue")] Asp.Net MVC3.0中防止跨站的POST,布布扣,

MVC3.0部署问题小结

环境:MVC3.0,IIS7 Mvc3.0的部署除像正常部署aspx程序一样外,另外还需要注意的几点:1. 安装MVC3.0 确保服务器上安装了MVC3.0,默认版本是“3.0.20105.0” 2. MVC版本一致性问题(重要) 此类问题会引起一堆譬如CS1705,CS0433类的问题,我就是碰到了这种问题,所以就这个问题详细说明一下: 此问题需要查看你本机开发时用的mvc类库版本与服务器上所安装的mvc类库版本是否一致,即使大版本号都是3.0,而小版本号不一致也会导致此类问题 MVC的版本号

MVC3.0 中Razor 学习

C# 的主要 Razor 语法规则 Razor 代码封装于 @{ ... } 中 行内表达式(变量和函数)以 @ 开头 代码语句以分号结尾 字符串由引号包围 C# 代码对大小写敏感 C# 文件的扩展名是 .cshtml MVC3.0 中Razor 学习 随着MVC3.0RTM版本的发布,最近将公司的项目从MVC2.0升级到MVC3.0.同时打算在MVC3中全面使用Razor模板引擎.现将Razor学习拿出来和大家分享,如果存在不足的地方欢迎您指出. 其实在使用<%= %>在html中调用C#代

Log4Net异常日志记录在asp.net mvc3.0的应用

前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual Studio2010(Asp.Net Mvc3.0)中使用log4net快速创建系统日志,如何扩展以输出自定义字段. 用户可以从http://logging.apache.org/log4net/下载log4net的源代码.解压软件包后,在解压的src目录下将log4net.sln载入Visual

C# mvc3 mvc4 伪静态及IIS7.5配置

mvc3 mvc4路由配置 //单独路由 routes.MapRoute(    name: "XXX",    url: "Home/XXX.html/{id}",    defaults: new { controller = "Home", action = "XXX", id = UrlParameter.Optional }); 或者//全站路由routes.MapRoute(   name: "Defau

vs2013+MVC3.0+EasyUI的ComboBox联动使用(二)

?? vs2013+MVC3.0+EasyUI的ComboBox联动使用(二) 简单介绍:在vs2013(.net4.0)中使用MVC3.0对于EasyUI中ComboBox的联动使用. 载入ComboBox数据,而且实现联动效果, 本文将採用EasyUI中的Date控件与ComboBox实现联动效果,如图: ----------------------------------------------------------------------------------------------