C# 获取删除HttpResponseMessage的属性

C# 获取删除HttpResponseMessage的属性,c#,asp.net,dotnet-httpclient,C#,Asp.net,Dotnet Httpclient,我希望测试下面一个API请求的输出 async Task DeleteNonExistantFoo() { using (HttpClient client = new HttpClient()) { client.BaseAddress = new Uri("Http://localhost:43240/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultR

我希望测试下面一个API请求的输出

async Task DeleteNonExistantFoo()
{
    using (HttpClient client = new HttpClient())
    {
        client.BaseAddress = new Uri("Http://localhost:43240/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        using (HttpResponseMessage response = await client.DeleteAsync("api/foos/1"))
        {
            var responseContent = await response.Content.ReadAsStringAsync();
            //Assert.AreEqual(?????, "A Foo with ID of 1 does not exist.");
        }
    }
}
我想从下面的响应中获取exceptionMessage,它是在我向API发送删除请求时作为响应给出的。在VisualStudio中调试时,它不允许我查看响应内容对象,这会导致错误

responseContent无法获取局部变量或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化。 "

我是否需要将其转换为JSON对象来读取它

{
    "message": "An error has occurred.",
    "exceptionMessage": "A Foo with ID of 1 does not exist.",
    "exceptionType": "System.Exception",
    "stackTrace": "
} 

您可以尝试使用
JsonConvert.DeserializeObject
方法的
Newtonsoft.Json
将响应Json转换为对象并使用它

创建一个类
apireponemodel

public class ApiResponeMoedl
{
    public string message { get; set; }
    public string exceptionMessage { get; set; }
    public string exceptionType { get; set; }
    public string stackTrace { get; set; }
}
然后使用
jsonvert.DeserializeObject
将json数据反序列化为
apResponeModel
对象,然后使用对象的
exceptionMessage
属性,您将获得您的沙漠信息

async Task DeleteNonExistantRedirect()
{
    using (HttpClient client = new HttpClient())
    {
        client.BaseAddress = new Uri("Http://localhost:43240/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        using (HttpResponseMessage response = await client.DeleteAsync("api/foos/1"))
        {
            var responseContent = await response.Content.ReadAsStringAsync();
            var respOjb = JsonConvert.DeserializeObject<ApiResponeMoedl>(responseContent);
            //respOjb.exceptionMessage
        }
    }
}
async Task deleteNoexistantRedirect()
{
使用(HttpClient=new HttpClient())
{
client.BaseAddress=新Uri(“Http://localhost:43240/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
使用(HttpResponseMessage response=wait client.deleteAync(“api/foos/1”))
{
var responseContent=await response.Content.ReadAsStringAsync();
var respOjb=JsonConvert.DeserializeObject(responseContent);
//respOjb.exception消息
}
}
}

不确定这是否是您的确切代码,但要小心为每个请求更新一个
HttpClient
,它实际上是一个。您应该使用共享的静态HttpClient(但请注意),是否可以在单元测试类的ClassInitialize方法中初始化HTTP客户端,并让所有测试都使用该HTTP客户端?谢谢您的回复,当我运行该代码并尝试调试它时,会收到以下错误消息:Test method Website.Test.Api.FooApiControllerTest.DeleteMethodFoo抛出异常:System.NullReferenceException:Object reference未设置为对象的实例。运行并获得错误时,您得到了什么json数据?您的问题是这个示例吗?responseContent=“”和responseObj=null,我在PostMani中测试API时仍然得到相同的httpresponse。我反复尝试了它,当我在数据库中的不同项目上尝试它时,它最终起到了作用。如果我遇到任何其他错误,我会告诉你的。谢谢