首页 > 解决方案 > 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 返回自定义消息?

标签: c#azureapiasp.net-core

解决方案


你应该阅读关于HTTP Status Codes.

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

相关帖子:

1.如何在.Net Core中返回错误状态码401的自定义错误消息?

2. 如何从Controller返回特定的状态码并且没有内容?


推荐阅读