gpt4 book ai didi

c# - 当操作名称以 "no route matches the supplied values"结尾时,Asp.Net Core 3.0 CreatedAtAction 返回 "Async"

转载 作者:行者123 更新时间:2023-12-03 15:22:42 30 4
gpt4 key购买 nike

我在使用 CreatedAtAction 时遇到了一个奇怪的问题,如果我的方法名称以“Async”关键字结尾,当我从我的 Add 方法返回 CreatedAtAction 时,我会收到 500 错误“没有路由与提供的值匹配”。如果我将其他任何内容作为方法名称,如 GetRatePlanAs、GetRatePlanAsyncA 或 GetRatePlan,那么它就像一个魅力。

如果我添加 [ActionName("GetRatePlanAsync")] 但我不想这样做,它也会起作用。

CreatedAtAction:

return CreatedAtAction(nameof(GetRatePlanAsync), new { ... }, null);

不起作用:
    [HttpGet]
[Route("item")]
public async Task<ActionResult> GetRatePlanAsync(...)

作品:
    [HttpGet]
[Route("item")]
[ActionName("GetRatePlanAsync")]
public async Task<ActionResult> GetRatePlanAsync(...)

还工作:
    [HttpGet]
[Route("item")]
public async Task<ActionResult> GetRatePlan(...)

最佳答案

经过几个小时的测试和东西,我找到了这些文章:
https://github.com/aspnet/AspNetCore/issues/15316https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio#async-suffix-removal-from-controller-action-names

简而言之,这是 Asp.Net Core 3.0 中的一个突破性变化。

我真正喜欢的一种解决方案是在配置服务启动中将 options.SuppressAsyncSuffixInActionNames 设置为 false:

    public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(options => options.SuppressAsyncSuffixInActionNames = false);

...
}

关于c# - 当操作名称以 "no route matches the supplied values"结尾时,Asp.Net Core 3.0 CreatedAtAction 返回 "Async",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59288259/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com