在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控制器抛出异常。 它应该工作,但看起来不太好。
有更好的方法吗?
答案 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