假设您的控制器扩展了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