我正在嘗試構建測試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