c# - Azure 不显示托管 .net 核心 API 的自定义错误消息
问题描述
我有以下 API 端点:
[AllowAnonymous]
[HttpPost("login")]
public async Task<IActionResult> Authenticate([FromBody] LoginViewModel credentials)
{
try
{
var result = await _facade.SomeMethodThatFailsAndThrowsCustomCode4001(credentials);
return Ok(result);
}
catch (CustomException cEx)
{
return StatusCode(4001, new { Message = cEx.FriendlyMessage ?? "" }); //Message = Our custom user friendly message
}
}
当通过 IIS 托管在外部服务器上时,这些消息被完美地返回。在 Azure 上托管时,消息未显示,这是收到的响应:
{
"Message": ""
}
我已经阅读了on-error 中允许的策略,但这意味着我需要.Net Core
在 Azure 中的 API 管理中注册我的 API,并且不确定这是否有必要。
需要进行什么配置以允许我们通过托管在 Azure 中的 API 返回自定义消息?
解决方案
1xx:信息性 - 收到请求,继续处理
2xx:成功 - 操作被成功接收、理解和接受
3xx:重定向 - 必须采取进一步行动才能完成请求
4xx:客户端错误 - 请求包含错误语法或无法完成
5xx:服务器错误 - 服务器未能满足明显有效的请求
首先,经测试,StatusCode的可用范围上限为999,当 时StatusCode >999
,会一直报错。
其次,您还可以在Startup.cs
.
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseStatusCodePages(async context =>
{
if (context.HttpContext.Response.StatusCode == 401)
{
await context.HttpContext.Response.WriteAsync("Custom Unauthorized request");
}
});
//other middlewars
相关帖子:
推荐阅读
- c# - 如何获取 aspusers 表的 id?
- python - selenium - Chromedriver- 扩展 - Python / crx to crx3
- c# - 在没有 Dapper 的情况下使用 sqlkata
- vim - NerdTree - 将打开的窗口调整为等宽
- javascript - 从材质 ui 函数调用函数
- jsonschema - 将请求正文与整个请求分开验证
- arrays - 即使某些单元格为空白,也要对一列求和?
- javascript - FindByIdAndUpdate 正在更新但返回 null
- mysql - 循环内的 MySQL 循环以转置记录
- java - 如何检索使用 Firebase 登录的 Facebook 个人资料的真实姓名(姓名和姓氏)?