将WebForm添加到MVC应用程序以使用较少扩展的Webform页面

时间:2019-01-15 04:17:46

标签: c# asp.net asp.net-mvc webforms

我有一个MVC应用程序,其中必须集成一些Web表单页面。

我只是在根目录中添加了一个Webform“ WebForm.aspx”,当我使用文件扩展名为http://localhost:54363/WebForm.aspx的webform访问该Webform时没有任何问题,但是当我尝试不使用文件扩展名{{1 }}

.aspx,因为得到http://localhost:54363/WebForm

为此,我按照此article对Global.asax文件进行了更改,但没有成功

下面是Global.asax文件的代码

404 error

我在上面的代码中出了什么问题吗?或者是为WebForm.aspx文件设置路由的正确方法是什么。

更新:

我也通过在RouteConfig.cs文件中添加网络表单路由代码来解决了这个问题

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace ProjectNameSpace
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

        }


        public static void RegisterRoutes(RouteCollection routes)
        {

            routes.RouteExistingFiles = true;
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("Content/{*pathInfo}");
            routes.IgnoreRoute("Scripts/{*pathInfo}");
            routes.IgnoreRoute("{WebPage}.aspx/{*pathInfo}");
            routes.IgnoreRoute("{resource}.ashx/{*pathInfo}");


            //routes.MapRoute(
            //    "Default", // Route name
            //    "{controller}/{action}/{id}", // URL with parameters
            //    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            //);

            routes.MapPageRoute("home", "WebForm/", "~/WebForm.aspx", false,
                new RouteValueDictionary {
                        { "path", "page-not-found" },{ "pagename", "page-not-found" }
                    });

        }
    }


}

1 个答案:

答案 0 :(得分:1)

根据我在上面的示例中看到的,您是在使用MapPageRoute的默认MVC路由之后添加MapRoute,因此MapPageRoute的顺序在MapRoute之后得到处理,这是错误的,因为路由是按照从最高到最高(从最高到最低)的顺序处理的。

要路由网络表单页面,MapPageRoute必须排在MapRoute的最前面:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.RouteExistingFiles = true;
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("Content/{*pathInfo}");
    routes.IgnoreRoute("Scripts/{*pathInfo}");
    routes.IgnoreRoute("{resource}.ashx/{*pathInfo}");

    // webforms page route
    routes.MapPageRoute("home", "WebForm", "~/WebForm.aspx", false,
        new RouteValueDictionary {
        { "path", "page-not-found" },{ "pagename", "page-not-found" }
    });

    // default MVC route
    routes.MapRoute(
       "Default", // Route name
       "{controller}/{action}/{id}", // URL with parameters
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}

附加说明:

您可以使用占位符作为页面名称,以在单个MapPageRoute定义中映射所有Webforms页面:

routes.MapPageRoute("home", "{WebPage}", "~/{WebPage}.aspx");

相关问题:

URL Routing C# mvc and Web Forms