C# Asp.Net Core 3.0 CreateDataAction返回;没有路线与提供的值相匹配;当操作名称以“结束”结尾时;异步;
我对CreateDataAction有一个奇怪的问题,如果我的方法名以“Async”关键字结尾,当我从Add方法返回CreateDataAction时,我会得到一个500错误“没有路由匹配提供的值”。如果我把其他任何东西作为方法名,比如GetRatePlanAs、GetRatePlanAsyncA或GetRatePlan,那么它就像一个符咒 如果我添加[ActionName(“GetRatePlanAsync”)],它也可以工作,但我不想这样做 CreateDataAction:C# Asp.Net Core 3.0 CreateDataAction返回;没有路线与提供的值相匹配;当操作名称以“结束”结尾时;异步;,c#,asp.net-core-webapi,asp.net-core-3.0,C#,Asp.net Core Webapi,Asp.net Core 3.0,我对CreateDataAction有一个奇怪的问题,如果我的方法名以“Async”关键字结尾,当我从Add方法返回CreateDataAction时,我会得到一个500错误“没有路由匹配提供的值”。如果我把其他任何东西作为方法名,比如GetRatePlanAs、GetRatePlanAsyncA或GetRatePlan,那么它就像一个符咒 如果我添加[ActionName(“GetRatePlanAsync”)],它也可以工作,但我不想这样做 CreateDataAction: return
return CreatedAtAction(nameof(GetRatePlanAsync), new { ... }, null);
不起作用:
[HttpGet]
[Route("item")]
public async Task<ActionResult> GetRatePlanAsync(...)
[HttpGet]
[路线(“项目”)]
公共异步任务GetRatePlanAsync(…)
作品:
[HttpGet]
[Route("item")]
[ActionName("GetRatePlanAsync")]
public async Task<ActionResult> GetRatePlanAsync(...)
[HttpGet]
[路线(“项目”)]
[ActionName(“GetRatePlanAsync”)]
公共异步任务GetRatePlanAsync(…)
还包括:
[HttpGet]
[Route("item")]
public async Task<ActionResult> GetRatePlan(...)
[HttpGet]
[路线(“项目”)]
公共异步任务GetRatePlan(…)
经过几个小时的测试,我发现了以下文章:
及
简而言之,这是Asp.NETCore3.0中一个突破性的变化
我实际上喜欢的一种解决方案是在配置服务启动时将options.SuppressAsyncSuffixInActionNames设置为false:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(options => options.SuppressAsyncSuffixInActionNames = false);
...
}
奇怪的错误/行为。。。是的,关闭“Async”后缀,或者[ActionName(“MyActionNameAsync”)]
注释可以工作(正如OP所说)。或者在Startup.cs中使用options.suppressAsyncyActionNames
也可以(Nemanja给出的解决方法)。谢谢你们两位!