Warm tip: This article is reproduced from serverfault.com, please click

c#-没有路由与HTTP POST提供的值匹配

(c# - No route matches the supplied values for HTTP POST)

发布于 2020-11-28 03:48:58

我正在做一个POST方法。以下代码接收一个对象,从所需的对象中获取数据,然后将其格式化为一个新对象并将其保存到数据库中。我使用以下代码:

        [HttpPost]
        public async Task<IActionResult> Create (Course course) {

            // Generate the object "newCourse" from the data I want

            // Save changes
            _context.Courses.Add(newCourse);
            await _context.SaveChangesAsync();

            // Return 201
            return CreatedAtAction(nameof(newCourse), newCourse);
        }

我收到以下错误:

System.InvalidOperationException: No route matches the supplied values.
   at Microsoft.AspNetCore.Mvc.CreatedAtActionResult.OnFormatting(ActionContext context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.ExecuteAsyncCore(ActionContext context, ObjectResult result, Type objectType, Object value)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.ExecuteAsync(ActionContext context, ObjectResult result)
   at Microsoft.AspNetCore.Mvc.ObjectResult.ExecuteResultAsync(ActionContext context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultAsync(IActionResult result)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeNextResultFilterAsync[TFilter,TFilterAsync]()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

从其他堆栈溢出问题中我了解到,此错误是(2016年)由路由方法的一个错误引起的,该错误以“异步”结束,并且已得到修复。但是,我使用的是最新版本,并且我的方法不包含短语“异步”,因此这不是我遇到的问题。我认为这与CreatedAtAction有关。我可能做错了什么?

Questioner
skelegorg
Viewed
11
skelegorg 2020-11-29 07:44:01

我通过更改来解决此问题

return CreatedAtAction(nameof(newCourse), newCourse);

return CreatedAtAction("Create", newCourse);

我相信nameof(newCourse)不是我尝试使用的重载的正确actionName参数。重载文档页面我将其更改为函数的名称。注意-当我尝试字符串“ Created”,仅“ Create”时,它不起作用。