错误处理操作如何确定我应该返回Web视图或api响应

时间:2017-11-24 22:22:02

标签: error-handling asp.net-core asp.net-core-mvc asp.net-core-webapi

在Asp.net Core项目中,我同时拥有Web UI和Web API控制器。 我关注https://www.devtrends.co.uk/blog/handling-errors-in-asp.net-core-web-api文章,并包含在startup.cs中:

app.UseStatusCodePagesWithReExecute("/Error/error/{0}");
app.UseExceptionHandler("/Error/error/500");

并在ErrorController中添加了错误处理操作:

[Route("error/{code}")]
public IActionResult Error(int code)
{
    return new ObjectResult(new ApiResponse(code));
}

这适用于web api,但不适用于网页。对于api,我们想要返回自定义对象(序列化为JSON),但对于UI,我们希望返回自定义视图。 我想写点像

public IActionResult Error(int code)
{
     if(CalledFromApiClient())
     {
           return new ObjectResult(new ApiResponse(code));
     }
     else
        return View(“Error”);
}

问题是如何实现CalledFromApiClient?

我正在考虑将所有api控制器保存在api子文件夹/命名空间中,并使用callstack查找是否从api控制器抛出异常。 它应该工作,但看起来不太好。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

我终于在同一作者https://www.devtrends.co.uk/blog/conditional-middleware-based-on-request-in-asp.net-core

的博客中找到了答案
  

此要求的一个常见示例是同时具有MVC和   您希望错误处理的API操作对于每个操作都不同。

我们假设url路径遵循api控制器操作Start WithSegment“api”

的约定
SELECT * FROM products WHERE productName=:productName