如果我在Startup.cs中有这些路径:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default_search",
template: "{controller=Home}/{action=Index}/{searchString}"
);
});
在我的控制器中我有:
public async Task<IActionResult> Search(string searchString)
{...
和
public async Task<IActionResult> Details(int? id)
{...
如何与传统路由匹配?它找到了搜索方法,但因为我的参数未命名为id
,所以它没有获得searchString
值,并且它没有使用具有{{1}的第二条路径}。如果我将控制器中我的参数名称更改为名为searchString
,则它可以正常工作。这是我应该开始考虑属性路由吗?
答案 0 :(得分:1)
路由匹配按照您映射的顺序进行。试试这个:
首先在模板中首先在特殊变量Home/Search/{searchString}
之前定义您想要的确切链接,然后将其强制转换为defaults
内的特定控制器和操作
然后使用通用模板:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "Home/About/{sa}",
defaults: new { controller = "Home", action = "About" });
routes.MapRoute(
name: "default_search",
template: "{controller=Home}/{action=Index}/{id?}");
});
}