如何在ASP.NET Core 2中的单个控制器中匹配多个常规路由?

时间:2018-02-13 21:24:53

标签: routing asp.net-core-2.0

如果我在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,则它可以正常工作。这是我应该开始考虑属性路由吗?

1 个答案:

答案 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?}");
      });
}