簡體   English   中英

Do.net 核心類目/子類目路由

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM