[英]Dotnet core category / subcategory routing
我正在創建一個 ASP.NET Core MVC 應用程序,其中的內容來自數據庫並且位於類別/子類別結構中。
我想在路由中實現的是,當用戶通過 url 進入時,例如: https://mysolution.com/categoryA
類別 controller 被調用。 當用戶通過https://mysolution.com/categoryA/SubCategoryB
進入時,應調用子類別 controller。 所以在 url 中我不會使用 controller 或動作名稱,總是可以調用索引動作和基於 URL 結構的 controller。
路由不需要檢查類別或子類別是否存在於數據庫中,將由 controller 處理。路由只需根據 url 的結構進行路由。
我現在有以下路由代碼,但沒有按預期工作。
endpoints.MapControllerRoute(
name: "ProductSubCategoryRoute",
pattern: "{category}/{subcategory}",
defaults: new { controller = "Subategory", action = "Index" }
);
endpoints.MapControllerRoute(
name: "ProductCategoryRoute",
pattern: "{*category}",
defaults: new { controller = "Category", action = "Index" }
);
有人對如何根據類別/子類別結構進行路由有任何想法嗎?
最好的祝福,
簡·威廉姆
您可以嘗試在app.UseRouting();
:
app.Use(async (context, next) =>
{
string pattern1 = "(category[A-Za-z]+/subcategory[A-Za-z]+)";
string pattern2 = "(/category[A-Za-z]+)";
var url = context.Request.Path.Value.ToLower();
var ss = Regex.Matches(url, pattern2);
if (Regex.Matches(url, pattern2).Count() > 0) {
string newurl = "";
if (Regex.Matches(url, pattern1).Count() > 0)
{
newurl = Regex.Replace(url, pattern1, "SubCategory");
}
else {
newurl = Regex.Replace(url, pattern2, "Category");
}
context.Response.Redirect(newurl);
return;
}
await next();
});
app.UseRouting();
這是我的終點:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
}
中間件可以幫你把https://mysolution.com/categoryA
https://mysolution.com/Category/Index
,把https://mysolution.com/categoryA/SubCategoryB
https://mysolution.com/SubCategory
. 示例正則表達式只能匹配Category+AZ或az,如果你想匹配其他字符,你可以改變模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.