Asp.net NET核心:路由。开始时url中有多个类别

Asp.net NET核心:路由。开始时url中有多个类别,asp.net,asp.net-core,asp.net-core-mvc,asp.net-core-1.0,asp.net-core-routing,Asp.net,Asp.net Core,Asp.net Core Mvc,Asp.net Core 1.0,Asp.net Core Routing,我必须从URL传递用户请求,如: site.com/events/2017/06/wwdc.html 或更常见的: site.com/category1/subcategory1/subcategory2/...../subcategoryN/page-title.html e、 g 通过操作索引(字符串标题)或类似操作,将ArticlesController发送到 在编译时,我不知道会有多少段。但我知道,URL将以/{pageTitle}.html结尾。主要问题是默认的asp.net核心路

我必须从URL传递用户请求,如:

site.com/events/2017/06/wwdc.html
或更常见的:

site.com/category1/subcategory1/subcategory2/...../subcategoryN/page-title.html
e、 g

通过操作
索引(字符串标题)
或类似操作,将
ArticlesController
发送到

在编译时,我不知道会有多少段。但我知道,URL将以
/{pageTitle}.html
结尾。主要问题是默认的asp.net核心路由不允许我编写类似
{*}/pageTitle.html


有可能吗?

有可能,你几乎做到了

路线是

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "all",
                template: "{*query}",
                defaults: new
                {
                    controller = "Index",
                    action = "ArticlesController"
                });
        });
编辑
模板:“{*query:regex(+.+/.+\\.html$)}”
将确保至少给出一个类别,并且标题以.html结尾

在控制器的动作中:

    public IActionResult Index(string query)
    {
        string[] queryParts = query.Split(new char[] { '/' });
        string title = queryParts[queryParts.Length - 1];
        string[] categories = queryParts.Take(queryParts.Length - 1).ToArray();

        // add your logic about the title and the categories

        return View();
    }
见:

专用常规路线通常使用全覆盖路线参数 像{*article}一样捕获URL路径的剩余部分。这 可能会使路由“过于贪婪”,这意味着它与您需要的URL匹配 旨在与其他路线相匹配。稍后再放“贪婪”路线 在路由表中解决此问题


该路由将捕获所有请求,而不仅仅是像
category/title.html
这样的东西。唯一能帮助我的是将此规则放在末尾。。。谢谢这条路线必须在终点,对吗。您可以通过在过滤器中应用正则表达式来过滤诸如
category/title.html
之类的内容<代码>模板:“{*query:regex(+/.+\\.html$)}”,
将非常适合您的需要;)(如果我的答案行得通的话,你也可以投我的赞成票:-p)对,我不知道。我对StackOverflow也是新手。
    public IActionResult Index(string query)
    {
        string[] queryParts = query.Split(new char[] { '/' });
        string title = queryParts[queryParts.Length - 1];
        string[] categories = queryParts.Take(queryParts.Length - 1).ToArray();

        // add your logic about the title and the categories

        return View();
    }