You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于ASP.NET获取WebRequest对象状态码并在单元测试中验证200状态的方法

问题分析与解决方案

我来帮你搞定这两个问题——先修复你的测试用例,再讲清楚ASP.NET里怎么正确获取WebRequest的状态码。

一、修复你的测试用例

你的代码里有几个小问题导致断言会失败,我帮你调整一下:

  1. 重复调用GetResponse():你在try块外面已经调用了一次,里面又调用,这会导致请求重复发送或者报错,得去掉外面的调用。
  2. 类型不匹配的断言:你把StatusCode转成了字符串,但HttpWebResponse.OK是枚举值,直接比较肯定不匹配,要保持枚举类型来对比。
  3. 资源释放优化:用using语句自动释放HttpWebResponse,比手动Close()更安全,避免资源泄漏。

修正后的代码如下:

public void DataControllerTest_NoData(long dataId) 
{ 
    var uri = "http://localhost:8311/api/Data?columnId=" + dataId; 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
    request.Headers.Add("Authorization", "Bearer " + token); 
    request.Method = "GET"; 
    HttpStatusCode statusCode = HttpStatusCode.InternalServerError; // 初始化默认值

    try 
    { 
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            statusCode = response.StatusCode;
        }
    } 
    catch (WebException we) 
    { 
        if (we.Response != null)
        {
            using (HttpWebResponse errorResponse = (HttpWebResponse)we.Response)
            {
                statusCode = errorResponse.StatusCode;
            }
        }
    } 

    // 直接用枚举值对比,不需要转字符串
    Assert.AreEqual(HttpStatusCode.OK, statusCode); 
}

二、ASP.NET中获取WebRequest状态码的正确方式

在ASP.NET里使用HttpWebRequest获取状态码要分两种情况:

  • 正常成功请求:当接口返回200、201这类成功状态码时,直接调用request.GetResponse()拿到HttpWebResponse,然后读取它的StatusCode属性(类型是HttpStatusCode枚举)即可。
  • 异常状态码(如404、500):当接口返回非2xx的状态码时,GetResponse()会抛出WebException。这时候需要从WebException的Response属性中取出响应对象,转成HttpWebResponse后再获取StatusCode。

注意一定要用using语句包裹HttpWebResponse,确保响应资源被正确释放,避免内存泄漏。

内容的提问来源于stack exchange,提问作者BenTen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 05:07:47