繁体   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