Asp.net core 没有路由与提供的值RedirectToRoute匹配

Asp.net core 没有路由与提供的值RedirectToRoute匹配,asp.net-core,asp.net-routing,Asp.net Core,Asp.net Routing,我已设置了以下路线 [HttpGet("bar")] public IActionResult Foo() 当我使用“/bar”访问网站时,我会被引导到Foo,正如预期的那样 但是,如果我尝试重定向到“bar”,我会得到一个错误: public async Task<IActionResult> Index() { return RedirectToRoute("bar"); } 公共异步任务索引() { 返回重定向路由(“bar”); } 没有路由与提供的值Redir

我已设置了以下路线

[HttpGet("bar")]
public IActionResult Foo()
当我使用“/bar”访问网站时,我会被引导到
Foo
,正如预期的那样

但是,如果我尝试重定向到“bar”,我会得到一个错误:

public async Task<IActionResult> Index()
{
    return RedirectToRoute("bar");
}
公共异步任务索引()
{
返回重定向路由(“bar”);
}
没有路由与提供的值RedirectToRoute匹配

为什么重定向路由不工作?

问题是“bar”是路由模板,而不是路由名称。为了重定向到特定路由,必须命名该路由。在这种情况下,您可以这样做

 [HttpGet("bar", Name = "bar")]
这也适用于创建路由,例如
Url.RouteUrl
new CreatedAtRouteResult
CreatedAtRoute
等。路由名称在所有情况下都必须存在

必须显式指定路由名称的好处是,现在可以更改模板而不中断命名路由

 [HttpGet("bar?{data?}", Name = "bar")]