我正在将asp.net webforms网站类型项目转换为asp.net mvc Web应用程序。我希望将所有更改保持在最低限度。
页面及其子文件夹位于项目文件夹的顶部,有数百个。
现在,在新的Web应用程序中,我想将它们移动到子文件夹,我们称之为WebForms。
运行时是否有办法在之前运行页面时运行,即在应用程序文件夹的根目录下运行?
我之前:http://localhost:54321/Page1.aspx。 Page1.aspx存储在网站项目根文件夹中。
在新项目结构中,我有磁盘:
<project folder>
WebForms
Page1.aspx
这有效:http://localhost:54321/WebForms/Page1.aspx,但我想以某种方式将其映射到http://localhost:54321/Page1.aspx。
可行吗?我使用IIS Express进行开发,使用IIS 7.5进行测试/生产部署。我想避免更改图像和其他内容网址 - 因为您可以想象将页面移动到子文件夹会破坏其中一些。
由于
答案 0 :(得分:1)
如果您只想将所有请求映射到/something.aspx
,以便转到WebForms\something.aspx
,则可以使用以下路由规则。
routes.MapPageRoute(
"Other Web Pages",
"{pagename}.aspx",
"~/WebForms/{pagename}.aspx");
或者,如果您需要更高级的方案,则可以使用派生自RouteBase
的自定义类,并使用RegEx
匹配并映射路由,类似于this question's answer < / p>
public class WebFormsRoute : RouteBase
{
Regex re = new Regex(@"^/(?<page>\w+)\.aspx", RegexOptions.IgnoreCase);
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var data = new RouteData();
var url = httpContext.Request.FilePath;
if (!re.IsMatch(url))
{
return null;
}
var m = re.Match(url);
data.RouteHandler = new PageRouteHandler("~/WebForms/" + m.Groups["page"].Value + ".aspx");
return data;
}
}
然后将其添加到RouteConfig
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new WebFormsRoute());
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}