<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        ASP.NET MVC3的偽靜態實現代碼

        來源:懂視網 責編:小采 時間:2020-11-27 22:42:39
        文檔

        ASP.NET MVC3的偽靜態實現代碼

        ASP.NET MVC3的偽靜態實現代碼:現在開始研究第一步,如何定義自己的路由規則,達到偽靜態的功能需求。 基本實現原理如下圖: 首先,關于命名空間。 路由的功能是為了讓所有Asp.net網站開發都可以使用,所以dll并沒有在MVC中,而是在System.Web中的System.web.Routing。 現
        推薦度:
        導讀ASP.NET MVC3的偽靜態實現代碼:現在開始研究第一步,如何定義自己的路由規則,達到偽靜態的功能需求。 基本實現原理如下圖: 首先,關于命名空間。 路由的功能是為了讓所有Asp.net網站開發都可以使用,所以dll并沒有在MVC中,而是在System.Web中的System.web.Routing。 現

        現在開始研究第一步,如何定義自己的路由規則,達到偽靜態的功能需求。

        基本實現原理如下圖:

         

        首先,關于命名空間。

        路由的功能是為了讓所有Asp.net網站開發都可以使用,所以dll并沒有在MVC中,而是在System.Web中的System.web.Routing。

        現在我們為了我們實際的需求,實現MVC3中的自定義路由功能(繼承RouteBase,重寫RouteData和VirtualPathData)。

        下面的例子實現以下目的:輸入一個youdomin.com/product/123.html,執行TestController中Index.
        第一步:實現TestRoute類
        1 RouteData 每次訪問URL都會從此入口
        通過httpContext.Request.AppRelativeCurrentExecutionFilePath 獲取我們訪問的url地址,根據地址進行分析:是不是符合我們的規則,符合我們規則我們就走特定的Controller和Action。代碼如下:
        代碼如下:


        public class TestRoute:RouteBase
        {
        private string[] urls;
        public TestRoute(params string[]targetUrls) {
        urls = targetUrls;
        }
        public override RouteData GetRouteData(HttpContextBase httpContext)
        {
        RouteData result = null;
        string requestedURL =
        httpContext.Request.AppRelativeCurrentExecutionFilePath+httpContext.Request.PathInfo;
        requestedURL = requestedURL.Substring(2).Trim('/');
        if (requestedURL.Contains(urls.ToArray().GetValue(0).ToString()))
        {
        result = new RouteData(this, new MvcRouteHandler());
        result.Values.Add("controller", "Test");
        result.Values.Add("action", "Index");
        result.Values.Add("p", requestedURL);
        }
        return result;
        }
        public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
        {
        return null;
        }
        }

        上面例子中,我們根據判斷Url中是否符合某個特定的值來特定執行特定Controller和特定Action,沒有就返回null。
        第二步,在Global.aspx中注冊我們自己的路與規則:
        代碼如下:

        public static void RegisterRoutes(RouteCollection routes)
        {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.Add(new TestRoute("product"));
        routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
        }
        protected void Application_Start()
        {
        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
        }

        注意上述代碼紅色部分,Application_Start() 中注冊一個路由規則,RegisterRoutes(RouteTable.Routes)然后在RegisterRoutes方法中加入如下代碼:
        routes.Add(new TestRoute("product"));
        注明:TestRoute 是上面我們自己定義的路由,實現RouteBase的類。
        第三步:新建第一步中測試用的Controller
        代碼如下:

        public class TestController:Controller
        {
        public ActionResult Index(string p)
        {
        ViewData["t"] =p;
        return View("");
        }
        }

        第四步:新建一個視圖
        代碼如下:

        @{
        Layout = null;
        }
        <!DOCTYPE html>
        <html>
        <head>
        <title></title>
        </head>
        <body>
        <div>
        <!--此處會顯示你輸入的URL地址-->
        @ViewData["t"].ToString()
        </div>
        </body>
        </html>

        第五步,直接輸入URl測試
        比如:http://127.0.0.1/product/1.html
        后續補充:
        主要內容:如何讓前臺列表展示頁顯示以上5步中實現的偽靜態URL?
        經過實際驗證,發現RouteBase中VirtualPathData的實現就能解決以上問題。.net Route其實已經實現了這個雙向解析的問題,通過輸入URL,從RouteData進入,根據自己的路由規則進行解析到相對應的Controller和Action,然后在使用URL.Action的地方從VirtualPathData解析出符合路由規則的URL地址,具體代碼如下:
        代碼如下:

        public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
        {
        if (values["controller"].ToString().Contains("Test"))
        {
        return new VirtualPathData(this, "product/" + values["p"] + ".html");
        }
        else
        return null;
        }

        可以替換第一步中TestRoute類中的GetVirtualPath方法,查看實際效果。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        ASP.NET MVC3的偽靜態實現代碼

        ASP.NET MVC3的偽靜態實現代碼:現在開始研究第一步,如何定義自己的路由規則,達到偽靜態的功能需求。 基本實現原理如下圖: 首先,關于命名空間。 路由的功能是為了讓所有Asp.net網站開發都可以使用,所以dll并沒有在MVC中,而是在System.Web中的System.web.Routing。 現
        推薦度:
        標簽: 實現 靜態 mvc
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 99re6在线视频精品免费| 中国一级毛片免费看视频| 亚洲一区二区三区成人网站| 污污视频网站免费观看| 免费无码中文字幕A级毛片| 日韩一区二区免费视频| 亚洲AV日韩AV永久无码久久| 亚洲成av人片在www鸭子| 最刺激黄a大片免费网站| 亚洲第一福利网站在线观看| 亚洲乱码一二三四五六区| 精品国产免费一区二区三区| 国产精品久免费的黄网站| 亚洲精品在线播放| 天黑黑影院在线观看视频高清免费| 久久久久亚洲精品男人的天堂| 亚洲AV无码国产精品永久一区| 亚洲大片免费观看| 国产国产人免费人成免费视频| 国产青草亚洲香蕉精品久久| 最近最新MV在线观看免费高清| 亚洲一本综合久久| 猫咪免费人成在线网站| 国外成人免费高清激情视频| 亚洲码一区二区三区| 日本视频免费在线| 一区二区三区在线免费 | 在线观看的免费网站无遮挡| 亚洲中文无码线在线观看| 三上悠亚在线观看免费| 亚洲国产香蕉碰碰人人| 猫咪社区免费资源在线观看| 亚洲偷自拍另类图片二区| 亚洲精品成人a在线观看| 真人无码作爱免费视频| 亚洲成AV人片一区二区密柚| 黄页免费在线观看 | 久久亚洲AV成人无码软件| 久久午夜夜伦鲁鲁片无码免费| 国产亚洲一区二区三区在线| 免费无码黄网站在线看|