假設您的控制器擴展了Microsoft.AspNet.MVC.Controller,您將繼承一些方法來執行您需要的操作,例如OK,Forbidden,BadRequest,ObjectResult等。因此,在上述情況下你可以不喜歡
public async IActionResult DoMyThing()
{
try
{
return ObjectResult(await DoMyInternalCall());
}
catch (Exception e)
{
//FigureOut the Exception type indications a security violation
return Forbidden()
}
....
我個人傾向於建立一個返回狀態,而不是拋出一個異常,這使得這一切有點清潔尤其是現在,我們有元組的API。所以像
public async IActionResult DoMyThing()
{
var (Status status, string myThing) = await DoMyInternalCall();
switch(status)
{
case Status.OK: return ObjectResult(myThing);
break;
case Status.AccessDenied: return Forbidden();
break;
case Status.NotFound: return Notfound();
...
雖然這只是一種滋味 - 我不判斷。關鍵是,Microsoft.AspNet.MVC.Controller內置了方法,可以讓您返回有效的HTTP狀態代碼和數據。
因此,在5xx與4xx之間進行討論與錯誤消息的迴應是錯誤的。 –
@Sam - 我同意阿列克謝,這個問題在這裏脫離主題。然而,如果你重新提出問題來問「怎麼做」而不是「我應該」這樣做,這將是一個合理的問題。 – NightOwl888