Asp.net - 从我的 URL 中删除文件夹结构
Asp.net - Remove Folder Structure From My URL
如果有人问过这个问题,我深表歉意,但我有一个 asp.net
网站,我所有的页脚页面都存储在 Visual Studio 下
视图 > 页脚 > [页面名称]
当我点击页脚 link 时,我的 URL 显示为:
http://www.mysite.co.uk/Views/Footer/testpage
我想要的是从 URL 中删除“/Views/Footer”,所以它看起来像:
http://www.mysite.co.uk/testpage
我不知道该怎么做。有人可以给我一步一步的代码使用指南和放置位置以便它执行此操作。
每当我尝试双击我的 Global.asax
文件时,它会自动打开我怀疑也是错误的 Global.asax.cs
文件
如果您不使用 MVC,则可以实现 IHttpModule。 Internet 上有几个关于如何执行此操作的指南,例如 Scott Guthrie 的指南:http://weblogs.asp.net/scottgu/tip-trick-url-rewriting-with-asp-net
将对 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 应用程序上使用过它,它非常有用。
如果有人问过这个问题,我深表歉意,但我有一个 asp.net
网站,我所有的页脚页面都存储在 Visual Studio 下
视图 > 页脚 > [页面名称]
当我点击页脚 link 时,我的 URL 显示为:
http://www.mysite.co.uk/Views/Footer/testpage
我想要的是从 URL 中删除“/Views/Footer”,所以它看起来像:
http://www.mysite.co.uk/testpage
我不知道该怎么做。有人可以给我一步一步的代码使用指南和放置位置以便它执行此操作。
每当我尝试双击我的 Global.asax
文件时,它会自动打开我怀疑也是错误的 Global.asax.cs
文件
如果您不使用 MVC,则可以实现 IHttpModule。 Internet 上有几个关于如何执行此操作的指南,例如 Scott Guthrie 的指南:http://weblogs.asp.net/scottgu/tip-trick-url-rewriting-with-asp-net
将对 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 应用程序上使用过它,它非常有用。