【问题标题】:Re-mapping folders in a asp.net web application在 asp.net Web 应用程序中重新映射文​​件夹
【发布时间】:2017-09-07 20:17:49
【问题描述】:

我正在将一个 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 进行测试/生产部署。我想避免更改图像和其他内容的 url - 你可以想象将页面移动到子文件夹会破坏其中的一些。

谢谢

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    如果您只想将所有请求映射到 /something.aspx 以便它们转到 WebForms\something.aspx,您可能只需要使用以下路由规则。

    routes.MapPageRoute(
       "Other Web Pages",
       "{pagename}.aspx",
       "~/WebForms/{pagename}.aspx");
    

    或者,如果您需要更高级的场景,您可以使用派生自RouteBase 的自定义类并使用RegEx 来匹配和映射路线,类似于this question's answer

    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 }
         );
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 2011-09-05
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多