Web APIを理解する目的で、テストWeb APIコントローラを構築しようとしています。ASP.NET Web API CreatedAtRoute return 500 Internal Server Error
[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)
方法は正常に動作:私は、次のWeb APIコントローラを書いています。コメント付きのポートメソッドも正常に動作します。他のpostメソッドでは、CreatedAtRoute
メソッドを使用しようとしています。ポストマンツールを使用してこのアクションを呼び出すと、500 internal server error
が返されます。私はメソッドのパラメータのいくつかの選択肢を試しました(あなたがコメントのreturnステートメントで見ることができるように)が、それらのうちのどれもうまくいきませんでした。
のSystem.InvalidOperationException:Noルートが供給 値と一致しない
これは私が得る詳細なエラーです。 でMicrosoft.AspNetCore.Mvc.CreatedAtRouteResult.OnFormatting(するactionContext コンテキスト)
で
Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor.ExecuteAsync(するactionContext コンテキストたObjectResult結果)
で Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__32.MoveNext()
---例外がスローされた前の場所からのスタックトレースの終わり - - Microsoftの System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotificationで System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク タスク)
(タスク タスク)
で
。 AspNetCore.Mvc.Internal.ControllerActionInvoker.d__31.MoveNext()
---例外がスローされた前の場所からのスタックトレースの末尾--- システムでMicrosoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__29.MoveNext()
---例外がスローされた以前の位置からスタックトレースの終了時
---
。 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotificationでRuntime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク タスク)
(タスク タスク)
Microsoft.AspNetCoreで Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__23.MoveNext()---例外がスローされた以前の位置からスタックトレースの終わり---
で
.Mvc.Internal.ControllerActionInvoker.d__18。MoveNextメソッド()
---例外がスローされた以前の位置からスタックトレースの終わり---
で System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク タスク)で Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNextでSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク)
()
---例外がスローされた以前の位置からスタックトレースの終わり---
System.Runtimeで System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク タスク)
で Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.d__6.MoveNext()
で.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク)
は、すべてのヘルプは非常に問題が(abi
がapi
する必要があります)あなたのHTTPのPOSTのreturn文でスペルミスのようです
これはおそらく、 'api/books/1'ではなく' abi/books/1'のようにタイプミスです。したがって、 'abi'で始まるルートがないので、エラーは正確です。 – Nkosi
あなたのスペルミスの問題は他の人にとっては非常に有用な質問ではありません。それを外したり閉じたりしてください。 –
私はあなたの提案を述べるより良い方法があると信じています。とにかく、質問を削除できませんでした。回答を削除できない質問を削除しようとするとエラーが発生します – user2931442