无法在 Web Api 2 中获取有关 BadRequest 的错误消息

Can't get error message on BadRequest in Web Api 2

我在谷歌上搜索了很多,但没有找到问题的答案,所以,让我们试试看是否有人可以帮助我。

我有一个 Web Api 2 操作来在进行一些验证后注册用户。如果一切正常,它 return 序列化用户,如果不正常,则在 BadRequest 响应中发送一条错误消息。

另一方面,我有一个 WPF 客户端调用 API 进行响应。

我的问题是我无法获取错误发送的原因,客户端只是收到 Bad Request 错误消息。

这是部分代码:

有人可以帮忙吗?

已编辑:

无论如何...dto 已正确发送到 api 坚果,这是您要求的序列化 dto:

"{\"IdCliente\":null,\"UserName\":\"Toni\",\"Email\":\"soft@moreno-csa.com\",\"Role\":\"Filtra\",\"Password\":\"TONI\"}"

抛出一个请求异常,而不是return:

throw new HttpResponseException(HttpStatusCode.BadRequest);

除非您需要传递给客户端的更多详细信息,在这种情况下您可以传回 Request.CreateErrorResponse,但您需要将 return 类型更改为 HttpResponseMessage

将下面的行添加到 Register 方法中的 WebAPIConfig.cs。这将包括错误详细信息,而不仅仅是一般的 500 内部服务器错误。

        GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

最后,我放弃了。 也许 web.config、mvc 配置、api 配置、过滤或任何令人不安的代码,并发送与控制器不同的响应。 我向我的 DTO 添加了一个状态代码和一条消息 属性,并且 return 始终是一个对象。 无论如何感谢所有试图帮助我的人。

您检查过 web.config httpErrors 部分了吗?

我遇到了同样的问题,因为我的 web.config 看起来像这样

<httpErrors errorMode="Custom" existingResponse="Replace">
    <clear />
    <error statusCode="404" path="~/Error/NotFound" responseMode="ExecuteURL" />
    <error statusCode="403" path="~/Error/AccessDenied" responseMode="ExecuteURL" />
    <error statusCode="500" path="~/Error/ServerError" responseMode="ExecuteURL" />
</httpErrors>

您必须确保 existingResponse 设置为 PassThrough

<httpErrors errorMode="Custom" existingResponse="PassThrough">
    <clear />
    <error statusCode="404" path="~/Error/NotFound" responseMode="ExecuteURL" />
    <error statusCode="403" path="~/Error/AccessDenied" responseMode="ExecuteURL" />
    <error statusCode="500" path="~/Error/ServerError" responseMode="ExecuteURL" />
</httpErrors>

不确定是否对您有帮助,但请试一试。

API

return new BadRequestErrorMessageResult(yourErrorMessage);

客户

var errorMessage = responseMessage.Content.ReadAsStringAsync().GetAwaiter().GetResult();
MessageBox.Show(errorMessage);