C# 如何在asp.net webform中使用单一路由创建友好url
我不确定是否有可能创建完全友好的url(我想他们在wordpress中称之为Slug) 我想用global.asax文件中定义的单一路由动态创建友好url 例如:C# 如何在asp.net webform中使用单一路由创建友好url,c#,asp.net,webforms,routing,url-routing,C#,Asp.net,Webforms,Routing,Url Routing,我不确定是否有可能创建完全友好的url(我想他们在wordpress中称之为Slug) 我想用global.asax文件中定义的单一路由动态创建友好url 例如: about-us/ about-us/who-we-are/ about-us/sub-page/sub-page2/ media/news/ media/photo-gallery/ media/press/ 目前,我必须为提到的每个url定义路由 我过去曾尝试使用gloabal.asax中定义的单一路由创建上述路由 范
about-us/
about-us/who-we-are/
about-us/sub-page/sub-page2/
media/news/
media/photo-gallery/
media/press/
目前,我必须为提到的每个url定义路由
我过去曾尝试使用gloabal.asax中定义的单一路由创建上述路由
范例
在global.asax文件中,我调用数据库表并获取诸如页面名称、页面处理程序、页面标题等信息
//Create Route
//some logic to get url segments so that it can be passed to
getPageDetails(PageURL)
{
//logic to get PageHandler so that route can be created
}
//For general.aspx Page
routes.MapPageRoute("Page", "about-us/", "~/Aboutus.aspx", false,
new RouteValueDictionary {
{ "path", "Page-not-found" },{ "PageName", "Page-not-found" }
});
如何动态创建此路由,以便动态传递关于我们/
&pageHandler,以便一个路由函数调用所有页面的路由。若这是可能的,那个么我可以通过添加额外的路由来更改global.asax路由部分,从而为网站添加尽可能多的页面
请建议如何调用数据库函数以获取pagehandler并将其分配给route以处理路由我不确定这是否可行
在wordpress中,他们创建页面&我们可以在asp.net web表单中实现友好的页面名称
带数据的示例表
Page_ID Page_Name Page_Handler Page_URL
1 About Us General.aspx /about-us/
2 Who we are General.aspx /about-us/who-we-are/
3 ... .. /about-us/sub-page/sub-page2/
4. Media #
5 News news.aspx /media/news/
6 Photo Gallery galler.aspx /media/photo-gallery/
有一个Nuget包,您可以轻松地将其添加到项目中:
RouteConfig.RegisterRoutes(RouteTable.Routes);
如果您有一个名为AboutUs.aspx的页面,您将自动获得/AboutUs路由。
只需添加包并调用
routes.EnableFriendlyUrls();
在RouteConfig中(此默认值随NuGet软件包提供),整个WebForms项目将丢失其.aspx扩展名并获得所需的路由。我尝试使用应用程序\u beginRequest事件解决您的问题。下面是代码,它不是生产准备代码[只是做了一个相同的应用],但它是一个例子,你如何解决你的问题。您可能需要根据不同的场景添加更多的检查和验证。但这应该不是什么大问题。请阅读并让我知道: 创建了一个类
public class MaintainUrls
{
public int PageId { get; set; }
public string Page_Name { get; set; }
public string Page_Handler { get; set; }
public string Page_Url { get; set; }
}
List<MaintainUrls> urls = new List<MaintainUrls>()
{
new MaintainUrls() { PageId = 1, Page_Name = "About Us", Page_Handler = "About.aspx", Page_Url = "/about-us"},
new MaintainUrls() { PageId = 2, Page_Name = "About Who we were", Page_Handler = "About.aspx", Page_Url = "/about-us/who-we-are/"},
new MaintainUrls() { PageId = 2, Page_Name = "About Who we were sub page", Page_Handler = "About.aspx", Page_Url = "/about-us/sub-page/sub-page2/"},
new MaintainUrls() { PageId = 1, Page_Name = "About Us", Page_Handler = "Contact.aspx", Page_Url = "/contact"},
new MaintainUrls() { PageId = 1, Page_Name = "About Us", Page_Handler = "Default.aspx", Page_Url = "/"},
};
类中的种子值
public class MaintainUrls
{
public int PageId { get; set; }
public string Page_Name { get; set; }
public string Page_Handler { get; set; }
public string Page_Url { get; set; }
}
List<MaintainUrls> urls = new List<MaintainUrls>()
{
new MaintainUrls() { PageId = 1, Page_Name = "About Us", Page_Handler = "About.aspx", Page_Url = "/about-us"},
new MaintainUrls() { PageId = 2, Page_Name = "About Who we were", Page_Handler = "About.aspx", Page_Url = "/about-us/who-we-are/"},
new MaintainUrls() { PageId = 2, Page_Name = "About Who we were sub page", Page_Handler = "About.aspx", Page_Url = "/about-us/sub-page/sub-page2/"},
new MaintainUrls() { PageId = 1, Page_Name = "About Us", Page_Handler = "Contact.aspx", Page_Url = "/contact"},
new MaintainUrls() { PageId = 1, Page_Name = "About Us", Page_Handler = "Default.aspx", Page_Url = "/"},
};
示例显示只有一个单页处理程序,这可以通过url路由轻松实现。你能给我看一个基于上述问题中提到的例子的代码示例吗?我注意到在最新版本的vs中,如果我没有错的话,就输了。aspx不是实际的对象。如果所有文件都在根文件夹中,让我们说一下about.aspx,contact.aspx,news.aspx,gallery.aspx那么,如果您想将新闻路径显示为
www.domain.com/about/our mission
,您将如何实现这一点?在这种情况下,文件不是子文件夹,但它使用相同的about.aspx文件来服务于我们任务页面的内容,但路径将以面包屑样式显示。您真的需要单路径吗,或者只是想在应用程序启动时动态生成路由?至少值得一试,如果您能解释一下最后一位代码,以便了解您的逻辑流程,那就太好了+1你能给我更多的细节吗,你觉得什么不管用?我们在这里拥有的是控制传入url并按我们希望的方式发送给它的能力。我们很容易忽略CSS、图像。