我正在尝试构建测试Web API控制器,仅用于了解Web API的目的。我写了下面的Web API控制器:ASP.NET Web API CreatedAtRoute返回500内部服务器错误
[Route("api/books")]
public class BookController : Controller
{
public IEnumerable<Book> Get()
{
List<Book> books = new List<Models.Book>();
books.Add(new Book { Title = "Test Title 1", Author = "Test Author 1", ISBN = "Test ISBN 1" });
books.Add(new Book { Title = "Test Title 2", Author = "Test Author 2", ISBN = "Test ISBN 2" });
return books;
}
[HttpGet("{id}")]
public Book Get(int id)
{
return new Book { Title = "Test Title 1", Author= "Test Author 1", ISBN="Test ISBN 1", PublishingDate = DateTime.Today.AddYears(-90).AddDays(-73) };
}
//[HttpPost]
//public IActionResult Post([FromBody]Book book)
//{
// string str = "Post request received";
// return new JsonResult(str);
//}
[HttpPost]
public IActionResult Post([FromBody]Book book)
{
//return CreatedAtRoute("abi/books", new { controller = "Book", id = 1 }, book);
//return CreatedAtRoute("Get", new { controller = "Book", id = 1 }, book);
//return CreatedAtRoute("Get", book);
//return CreatedAtRoute("abi/books", book);
return CreatedAtRoute("abi/books/1", book);
}
}
的Get
和Get(id)
方法做工精细。注释端口方法也可以正常工作。在其他post方法中,我试图使用CreatedAtRoute
方法。当我使用邮递员工具调用此操作时,它将返回500 internal server error
。我尝试了几个方法参数的替代方法(正如你可以在注释返回语句中看到的那样),但是它们都不起作用。
这是详细的错误,我得到:
System.InvalidOperationException:没有路由提供的 值相匹配。
在 Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.OnFormatting(ActionContext中 上下文)
在 Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor.ExecuteAsync(ActionContext中 上下文,ObjectResult结果)
在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__32.MoveNext()
---从以前位置抛出异常的堆栈跟踪结束 - -
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
在 微软。 AspNetCore.Mvc.Internal.ControllerActionInvoker.d__31.MoveNext()
---从以前的位置抛出异常的堆栈跟踪结束---
在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__29.MoveNext()
---从先前的位置在那里引发异常堆栈跟踪的结尾---
在 系统。 Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__23.MoveNext()
---从先前位置栈跟踪其中抛出异常结束---
在 Microsoft.AspNetCore .Mvc.Internal.ControllerActionInvoker.d__18。的MoveNext()
---从先前的位置堆栈跟踪,其中引发异常的结束---
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
在 Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext()
---从先前的位置堆栈跟踪,其中引发异常的结束---
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)
在 System.Runtime .CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.d__6.MoveNext()
任何帮助,高度赞赏
这很可能是一个错字,因为你有'abi/books/1'而不是'api/books/1'。因此错误是准确的,因为存在与开始没有路由'abi' – Nkosi
你的拼写错误的问题是不是为别人一个非常有用的问题。尝试删除或关闭它。 –
我相信有更好的方法来陈述你的建议。无论如何,我不能删除这个问题。 '方法将在获得工作的行动,以及;当我尝试删除,说明有正确答案的问题不能被删除 – user2931442