Asp.net NET核心:路由。开始时url中有多个类别
我必须从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核心路
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();
}