我的情况是,当我从服务器获得HTTP 400代码时,服务器会以完全合法的方式告诉我请求有什么问题(使用HTTP响应内容中的消息)

然而,事实并非如此.NET HttpWebRequest在状态代码为400时引发异常.

我该怎么处理这件事?对我来说,400美元是完全合法的,而且相当有帮助.HTTP内容有一些重要信息,但是这个异常让我迷失了方向.

推荐答案

如果有某种方法可以关闭"抛出非成功代码",那就太好了,但如果捕获WebException,至少可以使用以下响应:

using System;
using System.IO;
using System.Web;
using System.Net;

public class Test
{
    static void Main()
    {
        WebRequest request = WebRequest.Create("http://csharpindepth.com/asd");
        try
        {
            using (WebResponse response = request.GetResponse())
            {
                Console.WriteLine("Won't get here");
            }
        }
        catch (WebException e)
        {
            using (WebResponse response = e.Response)
            {
                HttpWebResponse httpResponse = (HttpWebResponse) response;
                Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
                using (Stream data = response.GetResponseStream())
                using (var reader = new StreamReader(data))
                {
                    string text = reader.ReadToEnd();
                    Console.WriteLine(text);
                }
            }
        }
    }
}

您可能希望将"即使不是成功代码也给我一个响应"位封装在一个单独的方法中.(如果没有回应,我建议你仍然抛出,例如,如果你无法连接.)

如果错误响应可能很大(这是不寻常的),您可能需要调整HttpWebRequest.DefaultMaximumErrorResponseLength以确保获得整个错误.

.net相关问答推荐

为什么在WinForm应用程序中创建组件类椭圆会在www.example.com中没有响应

使用PowerShell在Windows容器内安装exe

无法在Ubuntu 22.04.3上运行带有Rider 2023和DotNet-8.0的项目

为什么这个同步运行的异步睡眠会挂起?

如何判断属性设置器是否公开

在 WP7 中将 List 转换为 ObservableCollection

代码访问安全是否在任何现实世界中使用?

JavaScript 中的IsNullOrWhitespace?

不同命名空间中的部分类

ILMerge 最佳实践

泛型方法是如何、何时、何地具体化的?

返回 IQueryable 或不返回 IQueryable

在 Moq Callback() 调用中设置变量值

InternalsVisibleTo 属性不起作用

C#:获得完整的桌面大小?

返回 IList 是否比返回 T[] 或 List 更糟糕?

Linq to SQL - 返回前 n 行

Moq - 不可覆盖的成员不能用于设置/验证表达式

如何将 VB 项目转换为 C# 项目

什么时候使用 Tuple 和 KeyValuePair 比较好?