asp.net mvc5 偽靜態


 

asp.net mvc5 偽靜態 WebForm

Mvc4和5通用

1、背景:老項目WebForm開發 需要 融合到新項目Mvc5開發

2、需求:Url地址TruckDetail.aspx?id=455 達到效果 truck/455.html

3、不是最佳方案,但是個過度項目所以達到效果ok,歡迎丟轉。

第一步:繼承IRouteHandler

復制代碼
public class OldWebFormsRouteHandler : IRouteHandler
    {
        private string pageName = string.Empty;
        private string id = string.Empty;
        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            
            pageName = requestContext.RouteData.GetRequiredString("oldPageName");
            id = requestContext.RouteData.GetRequiredString("id");

            string path="/Pages/" + this.pageName + ".aspx";

            IHttpHandler MyHander = BuildManager.CreateInstanceFromVirtualPath(path, typeof(System.Web.UI.Page)) as IHttpHandler;
            return MyHander;
        }
    }
復制代碼

第二步:在默認規則前ADD 注意.html

復制代碼
public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.Add("MyRoute", new Route("{oldPageName}/{id}.html", new OldWebFormsRouteHandler()));

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
復制代碼

第三步:修改Web.config

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

第四步:aspx頁面獲得參數Request.QueryString["id"]換成RouteData.Values["id"]

復制代碼
<form id="form1" runat="server">
    <div>
    
        id:<%=RouteData.Values["id"]==null?"yy":RouteData.Values["id"].ToString() %><br />
        oldPageName:<%=RouteData.Values["oldPageName"]==null?"no":RouteData.Values["oldPageName"].ToString() %>

    </div>
</form>
復制代碼

效果:

轉載請注明來源地址:http://www.cnblogs.com/huangyoum/p/4154338.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM