提问人:Mohamed 提问时间:4/25/2023 最后编辑:Mohamed 更新时间:4/25/2023 访问量:112
如何在使用 AspNet.FriendlyUrls 时添加自定义友好 URL?
how to add a custom friendly URL while using AspNet.FriendlyUrls?
问:
我需要你的帮助; 我正在使用 c# 开发一个 asp.net Web 应用程序 我使用Microsoft AspNet FriendlyUrls制作没有后缀aspx的url 在App_Code>App_start中,我添加了以下类
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings,new WebMethodFriendlyUrlResolver());
}
public class WebMethodFriendlyUrlResolver : WebFormsFriendlyUrlResolver
{
public override string ConvertToFriendlyUrl(string path)
{
if (HttpContext.Current.Request.PathInfo != string.Empty)
{
return path;
}
else
{
return base.ConvertToFriendlyUrl(path);
}
}
}
}
在 Global.asax 中,我使用了以下代码
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes);
}
它可以很好地从 URL 中删除 aspx 部件 现在。。。。。。。。。。 我有一个搜索页面在 url 中使用了 3 个参数,例如(Plumber,Cairo,Dar Elsalam)
.../search/find?Syx=job=Plumber%20+%20state=CAIRO%20+%20city=ELSALAM%20DAR%20+%20
如何使 Up URL 成为
.../search/plumber-in-dar-elsalam
我将不胜感激你的想法
我在互联网上搜索解决方案,但找不到适合我的情况的解决方案
我试过这段代码
routes.MapPageRoute("plum-darelsalam", "plumber-in-dar-elsalam", "~/find?Syx=job=Plumber%20+%20state=CAIRO%20+%20city=ELSALAM%20DAR%20+%20.aspx");
后
routes.EnableFriendlyUrls(settings,new WebMethodFriendlyUrlResolver());
但没有用 ☹️
答:
好吧,有了这个 URL
/search/findSyx=job=Plumber%20+%20state=CAIRO%20+%20city=ELSALAM%20DAR%20+%20
../search/find?Syx=job=Plumber%20+%20state=CAIRO%20+%20city=ELSALAM%20DAR%20+%20
作为一个友好的 URL,它将成为:
/search/job/Plumber/Cario/Elalam dar
(或至少接近上述)。
so for say
/Projects?QuoteNum=123456
您可以拥有:
/Projects/QuoteNum/123456
甚至
/Projects/Quotes/123456
请注意,在上面,假设基本页面是“项目”,那么你可以随心所欲地制作一些不错的链接。你甚至可以有这个:
/Projects/123456
但是,“大多数情况下”最好包括“事物”是什么,所以
/Projects/Invoices/123456
请注意,您决定拥有的“额外”值或关键字 100% 由您决定。
现在是 WHOPPER 部分!!!
.net 不会自动更改您拥有的旧样式 URL,新格式也不会起作用我的一些魔术。你,开发人员,现在必须抓住并使用这些新价值。
因此,代码将如下所示:
for the page Projects.aspx, as per above examples, then you can do this in code behind:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// first page load, get friendly URL parts
IList<string> fURL = new List<string>();
fURL = Request.GetFriendlyUrlSegments();
if (fURL.Count == 2)
{
// 2 values in URL,
switch (fURL[0])
{
case "Quote":
string sQuoteNumber = fURL[1];
// code here for getting quote number
break;
case "Invoice":
string sInvoiceNumber = fURL[2];
// code here for invoice number
break;
}
}
因此,不会自动将“旧样式”参数转换为新样式,您必须编写代码来使用和处理 URL 参数的新样式。(这将需要您编写新代码)。
所以,在上面,你可以说使用这个:
Projects/Quotes/123456
或
Projects/Invoices/2345
当然,真正好的是用户不会想到参数,但不仅会看到一个漂亮干净的链接,而且会看到一个看起来像“文件夹”的链接,他们也可以共享这样的链接。
虽然用户可以“弄乱”参数,但它们很难,但友好的 URL 非常好,他们通常会开始使用它们来获取给定的报价,甚至分享此类链接。
因此,作为带有参数的旧式 URL,您可能有这个:
Projects?State="New York"&Quote=12345
以上现在变成了
Projects/New York/12345
或者也许
Projects/New York/Quotes/12345
因此,您可以制作出非常好的 URL,但是您作为开发人员将不得不使用 GetFriendlyUrlSegments 获取/抓取/处理/使用/编写代码,并且不会发生一些自动或自动魔术转换。
您当然可以同时支持这两种类型的 URL 参数。这意味着您必须保留现有的旧样式代码,然后为新类型的参数添加额外的新代码 - 它们不是“一对一”或可互换的。
评论
"job=Plumber + state=CAIRO + city=ELSALAM DAR + "
"plumber-in-dar-elsalam"