用HttpWebRequest请求时,获取响应的状态码

本文介绍如何使用C#编写代码以检测HTTP请求的响应状态码,并处理可能出现的异常情况,例如302重定向。通过示例代码演示如何获取响应状态码并验证其值,以确保请求成功或被正确重定向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上一段代码

[TestMethod]
public void TestWebPage()
{
	var httpStatusCode = 200;
	try
	{
		var req = WebRequest.Create( "http://10.168.94.116/Default.aspx" );

		req.Method = "GET";
		/// 获取响应流
		var rsp = req.GetResponse() as HttpWebResponse;	// 最好能捕获异常302的HttpException,然后再处理一下。在Data中取键值 Location
		httpStatusCode = (int)rsp.StatusCode;
	}
	catch ( WebException ex )
	{
		var rsp = ex.Response as HttpWebResponse;
		Assert.AreNotEqual( null, rsp, ex.Message );
		httpStatusCode = (int)rsp.StatusCode;
	}
	if ( httpStatusCode == 200 )
		Assert.AreEqual<int>( 200, httpStatusCode );
	else
		Assert.AreEqual<int>( 403, httpStatusCode );

}


怎么取,很明显了。

如果你还想要取中断了的流数据,可以在捕获取的WebException类中,取他的Response,来继续读取数据流内容


<think>好的,用户需要的是用C#发送HTTP请求获取响应的代示例。首先,我得回想一下在C#中常用的HTTP客户端方法。记得.NET里有HttpClient类,应该是现在推荐的方式,替代了旧的WebClient和HttpWebRequest。 用户可能想要一个简单的例子,比如发送GET请求获取响应内容。HttpClient的用法应该包括创建实例、使用GetAsync方法发送请求,然后读取响应内容。要注意异步编程,所以示例应该用async/await。不过用户可能只是需要基础代,可能不需要深入异步细节,但为了正确性,代应该包含async方法。 另外,可能需要处理不同的HTTP方法,比如POST。用户的问题里没有明确说明,但提供一个GET和POST的例子会更全面。比如,POST请求可能需要设置Content,使用StringContent或者FormUrlEncodedContent。 还要考虑异常处理,比如网络错误或者无效的URL。但用户可能只需要核心代,所以可以省略try-catch块,但最好在说明中提到需要注意错误处理。 引用方面,需要看看之前的引用内容是否有相关的内容。用户提供的引用[1]提到用Content方法返回用户输入的数据,可能和接收响应内容相关。引用[2]是关于.NET客户端API的,可能涉及到发送请求后的确认,但不确定是否直接相关。引用[3]可能不太相关,但需要检查是否有HTTP请求相关的部分。不过根据用户提供的引用,引用[1]中的Content方法可能和获取查询参数有关,但这里用户的需求是发送请求,所以可能需要调整引用的部分。 需要确保代示例正确使用HttpClient,并且遵循最佳实践,比如重用HttpClient实例而不是频繁创建和销毁。不过对于简单示例,可能在using语句中创建,但在实际应用中建议静态实例。但用户可能只需要最简代,所以示例中使用using是可以的。 最后,生成相关问题,需要考虑用户可能想了解更深入的内容,比如处理JSON、添加请求头、处理超或异步方法等。问题应该覆盖这些方面,帮助用户扩展知识。</think>以下是如何在C#中发送HTTP请求获取响应的代示例,分为GET和POST两种常用方法: ### 一、GET请求示例 ```csharp using System; using System.Net.Http; using System.Threading.Tasks; class Program { static async Task Main() { using var client = new HttpClient(); try { // 发送GET请求 HttpResponseMessage response = await client.GetAsync("https://api.example.com/data"); response.EnsureSuccessStatusCode(); // 验证响应状态 // 读取响应内容 string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseBody); } catch (HttpRequestException e) { Console.WriteLine($"请求错误: {e.Message}"); } } } ``` ### 二、POST请求示例 ```csharp using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; class Program { static async Task Main() { using var client = new HttpClient(); var jsonPayload = "{\"name\":\"John\", \"age\":30}"; try { // 发送POST请求 var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json"); HttpResponseMessage response = await client.PostAsync("https://api.example.com/submit", content); // 处理响应 if (response.IsSuccessStatusCode) { string result = await response.Content.ReadAsStringAsync(); Console.WriteLine($"服务器响应: {result}"); } } catch (HttpRequestException e) { Console.WriteLine($"请求错误: {e.Message}"); } } } ``` ### 关键点说明: 1. `HttpClient`需使用`using`语句管理资源 2. `EnsureSuccessStatusCode()`方法会自动检查2xx状态 3. 异步方法需使用`async/await`关键字[^2] 4. POST请求需指定Content-Type(如`application/json`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烈火蜓蜻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值