当 HttpWebRequest.GetResponse 抛出 WebException 时,如何读取自定义错误消息?

3

我有一个简单的.NET Core API测试方法:

public async Task<IActionResult> TestApi()
{
    try
    {
        throw new UnauthorizedAccessException("My custom error");

        return Ok();
    }
    catch (UnauthorizedAccessException ex)
    {
        return StatusCode(401,ex.Message);
    }
    catch (Exception ex)
    {
        throw;
    }

}

我需要从像这样的客户端中检索消息:
var request = WebRequest.Create($"{baseUrl}{url}") as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json";
request.Expect = "application/json";
request.ContentLength = 0;

if (parameters != null)
{
    request.ContentLength = serializedObject.Length;
    using (var writer = new StreamWriter(request.GetRequestStream()))
    {
        writer.Write(serializedObject);
    }
}

var response = request.GetResponse() as HttpWebResponse;
var responseEncoding = Encoding.GetEncoding(response.CharacterSet);

using (var sr = new StreamReader(response.GetResponseStream(), responseEncoding))
{
    var result = sr.ReadToEnd();
    return JsonConvert.DeserializeObject<T>(result);
}

现在,request.GetResponse() as HttpWebResponse 返回给我以下内容:
The remote server returned an error: (401) Unauthorized.

有没有人能帮我指一下方向? 我想要的不是 自定义错误 ,而是...

输入图像描述


你看过内部异常吗? - Anonymous
你读过这篇文章吗:https://dev59.com/R1YN5IYBdhLWcg3w578u ? - David Tansey
我阅读了很多帖子,但都没有找到答案。你建议的那个是针对MVC 5的。 - danyolgiax
响应对象包含StatusCode和StatuDescription,但两者都是“未经授权的”。 - danyolgiax
抱歉,请从异常的Response属性中获取GetResponseStream - Scott Hannen
显示剩余2条评论
2个回答

2
这是一个简化的示例,它可以读取您的自定义消息。您的消息将在响应流中返回。"最初的回答"
try
{
    var response = request.GetResponse() as HttpWebResponse;
}
catch (WebException ex) // this exception is thrown because of the 401.
{
    var responseStream = ex.Response.GetResponseStream();
    using (var reader = new StreamReader(responseStream))
    {
        var message = reader.ReadToEnd();
    }
}

0

返回一个ActionResult

Task<ActionResult>

然后,您可以将未经授权的错误封装在UnauthorizedObjectResult中

return Unauthorized(new UnauthorizedObjectResult(errorModel));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接