【发布时间】:2019-12-25 20:26:48
【问题描述】:
我正在尝试显示使用 HttpClient.PostJsonAsync<T>() 时从 Web API 返回的相关错误消息。
在我的 Web API 中,例如在登录失败时,我将返回 401 未授权异常,正文中带有错误处理中间件的消息;
public class HttpErrorHandlerMiddleware
{
private readonly RequestDelegate _next;
public HttpErrorHandlerMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (HttpStatusCodeException exception)
{
if (!context.Response.HasStarted)
{
context.Response.StatusCode = (int)exception.StatusCode;
context.Response.Headers.Clear();
await context.Response.WriteAsync(exception.Message);
}
}
}
}
// Extension method used to add the middleware to the HTTP request pipeline.
public static class HttpErrorHandlerMiddlewareExtensions
{
public static IApplicationBuilder UseHttpErrorHandlerMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<HttpErrorHandlerMiddleware>();
}
}
然后在Postman 中显示消息,例如“用户名或密码无效”、“用户被锁定”等
但是,当我尝试在客户端捕获错误时,例如
try
{
var result = await _httpClient.PostJsonAsync<LoginResponse>("api/login", loginModel);
/* Removed for brevity */
}
catch(Exception ex)
{
return new LoginResponse { Success = false, Error = ex.Message };
}
返回的错误始终是“响应状态码不表示成功:401(未授权)。”
请问我如何从PostJsonAsync<T> 的返回中获取错误的详细信息?
【问题讨论】:
-
因为它不认为您的消息是异常原因。您始终可以使用 401 返回一条消息“一切都已完美完成”。要获取该消息,请阅读从客户端返回的正文
-
@TuyenPham 请问我如何从
PostJsonAsync<T>的返回异常中读取正文? -
代替
PostJsonAsync,可以使用PostAsync,当出现异常时可以读取内容:stackoverflow.com/a/39414248/1560697 -
你是如何在正文中返回
401和Invalid UserName or Password的?PostJsonAsync是什么?
标签: c# asp.net-core-webapi asp.net-core-2.1