Kembali di RC1, saya akan melakukan ini:
[HttpPost]
public IActionResult Post([FromBody]string something)
{
try{
// ...
}
catch(Exception e)
{
return new HttpStatusCodeResult((int)HttpStatusCode.InternalServerError);
}
}
Di RC2, tidak ada lagi HttpStatusCodeResult, dan tidak ada yang dapat saya temukan yang memungkinkan saya mengembalikan 500 jenis IActionResult.
Apakah pendekatannya sekarang sama sekali berbeda dengan yang saya tanyakan? Apakah kita tidak lagi mencoba menangkap Controller
kode? Apakah kita membiarkan kerangka kerja melemparkan pengecualian 500 generik kembali ke pemanggil API? Untuk pengembangan, bagaimana saya bisa melihat tumpukan pengecualian yang tepat?
c#
asp.net-core
asp.net-core-mvc
Mickael Caruso
sumber
sumber
Anda dapat menggunakan
Microsoft.AspNetCore.Mvc.ControllerBase.StatusCode
danMicrosoft.AspNetCore.Http.StatusCodes
untuk membentuk respons Anda, jika Anda tidak ingin membuat kode angka tertentu.PEMBARUAN: Aug 2019
Mungkin tidak terkait langsung dengan pertanyaan awal tetapi ketika mencoba untuk mencapai hasil yang sama dengan
Microsoft Azure Functions
saya menemukan bahwa saya harus membangunStatusCodeResult
objek baru yang ditemukan diMicrosoft.AspNetCore.Mvc.Core
majelis. Kode saya sekarang terlihat seperti ini;sumber
Jika Anda membutuhkan badan dalam respons Anda, Anda dapat menelepon
Ini akan menghasilkan 500 dengan objek respons ...
sumber
return StatusCode(StatusCodes.Status500InternalServerError, new { message = "error occurred" });
Dan tentu saja, Anda dapat menambahkan pesan yang deskriptif seperti yang Anda inginkan, dan elemen lainnya juga.Cara yang lebih baik untuk menangani ini seperti yang sekarang (1,1) adalah untuk melakukan hal ini di
Startup.cs
'sConfigure()
:Ini akan menjalankan rute untuk
/Error
. Ini akan menyelamatkan Anda dari menambahkan blok try-catch ke setiap tindakan yang Anda tulis.Tentu saja, Anda harus menambahkan ErrorController yang serupa dengan ini:
Informasi lebih lanjut di sini .
Jika Anda ingin mendapatkan data pengecualian yang sebenarnya, Anda dapat menambahkan ini di atas
Get()
tepat sebelumreturn
pernyataan.Cuplikan di atas diambil dari blog Scott Sauber .
sumber
ExceptionHandler
middleware di sini. Anda dapat, tentu saja, menggulung sendiri atau memperpanjang sesuai keinginan Anda. Inilah tautan ke sumbernya . EDIT: Lihat baris ini untukIExceptionHandlerPathFeature
.Harus digunakan dalam konteks non-ASP.NET (lihat jawaban lain untuk ASP.NET Core).
HttpStatusCode
adalah enumerasi diSystem.Net
.sumber
Bagaimana dengan membuat kelas ObjectResult kustom yang mewakili Galat Server Internal seperti untuk
OkObjectResult
? Anda dapat menempatkan metode sederhana di kelas dasar Anda sendiri sehingga Anda dapat dengan mudah menghasilkan InternalServerError dan mengembalikannya seperti yang Anda lakukanOk()
atauBadRequest()
.sumber
Saat Anda ingin mengembalikan respons JSON di MVC .Net Core Anda juga dapat menggunakan:
Ini akan mengembalikan hasil JSON dan HTTPStatus. Saya menggunakannya untuk mengembalikan hasil ke jQuery.ajax ().
sumber
return new JsonResult ...
tetapi bekerja dengan baik.Untuk aspnetcore-3.1, Anda juga dapat menggunakan
Problem()
seperti di bawah ini;https://docs.microsoft.com/en-us/aspnet/core/web-api/handle-errors?view=aspnetcore-3.1
sumber