我有一个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" }
});
}
}
}
答案 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");
相关问题: