C# Asp.Net Core 3.0 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

我对CreateDataAction有一个奇怪的问题,如果我的方法名以“Async”关键字结尾,当我从Add方法返回CreateDataAction时,我会得到一个500错误“没有路由匹配提供的值”。如果我把其他任何东西作为方法名,比如GetRatePlanAs、GetRatePlanAsyncA或GetRatePlan,那么它就像一个符咒

如果我添加[ActionName(“GetRatePlanAsync”)],它也可以工作,但我不想这样做

CreateDataAction:

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给出的解决方法)。谢谢你们两位!