从我的URL中删除文件夹结构

本文关键字:文件夹 结构 删除 我的 URL | 更新日期: 2023-09-27 18:07:03

如果这个问题已经被问到,我很抱歉,但我有一个asp.net网站,我所有的页脚页面都存储在Visual Studio

Views> Footer> [Page Names]

当我点击页脚链接时,我的URL显示为:

http://www.mysite.co.uk/Views/Footer/testpage

我要做的是从URL中删除"/Views/Footer",所以它看起来像:

http://www.mysite.co.uk/testpage

我不知道该怎么做。有没有人能给我一步一步的代码使用指南,以及把它放在哪里,以便它做到这一点。

当我尝试双击我的Global.asax文件时,它会自动打开Global.asax.cs文件,我怀疑这也是错误的

从我的URL中删除文件夹结构

将system.web.routing的引用添加到项目

添加urlroutingmodule到HTTP模块:

    <configuration> 
   ... 
   <system.web> 
      ... 
      <httpModules> 
         ... 
         <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      </httpModules>
   </system.web> 
   <system.webServer> 
      <validation validateIntegratedModeConfiguration="false"/> 
      <modules> 
         ... 
         <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      </modules> 

      <handlers>
         ...
         <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </handlers>
      ... 
   </system.webServer>
</configuration>

在global.asax:

中定义路由
void Application_Start(object sender, EventArgs e) 
{ 
   RegisterRoutes(RouteTable.Routes); 
} 
void RegisterRoutes(RouteCollection routes) 
{ 
   // Register a route for Categories/All 
   routes.Add( 
      "All Categories",
         new Route("Categories/All", new CategoryRouteHandler()) 
      );
   // Register a route for Categories/{CategoryName} 
   routes.Add( 
      "View Category",
      new Route("Categories/{*CategoryName}", new CategoryRouteHandler()) 
   );
   // Register a route for Products/{ProductName} 
   routes.Add( 
      "View Product",
      new Route("Products/{ProductName}", new ProductRouteHandler()) 
   );
}

创建路由处理程序类

public class ProductRouteHandler : IRouteHandler 
{ 
   public IHttpHandler GetHttpHandler(RequestContext requestContext) 
   { 
      string productName = requestContext.RouteData.Values["ProductName"] as string; 
      if (string.IsNullOrEmpty(productName)) 
         return Helpers.GetNotFoundHttpHandler(); 
      else 
      { 
         // Get information about this product 
         NorthwindDataContext DataContext = new NorthwindDataContext(); 
         Product product = DataContext.Products.Where(p => p.ProductName == productName).SingleOrDefault(); 
         if (product == null) 
            return Helpers.GetNotFoundHttpHandler(); 
         else 
         { 
            // Store the Product object in the Items collection 
            HttpContext.Current.Items["Product"] = product; 
            return BuildManager.CreateInstanceFromVirtualPath("~/ViewProduct.aspx", typeof(Page)) as Page; 
         } 
      } 
   } 
} 

创建处理请求的asp.net页面:

protected void Page_Load(object sender, EventArgs e) 
{ 
   dvProductInfo.DataSource = new Product[] { Product }; 
   dvProductInfo.DataBind(); 
} 
protected Product Product 
{ 
   get 
   { 
      return HttpContext.Current.Items["Product"] as Product; 
   } 
}

这是一个很好的参考工作,我过去在webforms应用程序上使用过这个,它像一个魅力。

如果你不使用MVC,那么你可以实现一个IHttpModule。互联网上有一些关于如何做到这一点的指南,例如Scott Guthrie在这里:http://weblogs.asp.net/scottgu/tip-trick-url-rewriting-with-asp-net