如何获取Web API IHttpActionResult响应并序列化c#

本文关键字:响应 IHttpActionResult 序列化 API Web 何获取 获取 | 更新日期: 2023-09-27 18:15:20

我试图获得"响应,序列化和消费"的web api,我从来没有写过一个web api。

我有以下Web API:

 [HttpGet]     
 public IHttpActionResult SendMsg(string yourName)       
 {
        var result = "Hi " + yourName;
        if (result == null)
        {
            return NotFound();
        }
        return Ok(result);
  }

和我试图得到响应与此代码:

    private void ResponseWebAPI(string strApiAddress)
    {
        HttpWebRequest request = WebRequest.Create(strApiAddress) as HttpWebRequest;
        HttpWebResponse response = request.GetResponse() as HttpWebResponse;
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(response.GetResponseStream());
    }

我正在接收响应没有任何问题,但是当我加载响应时,我得到了以下错误:

根级数据无效。第一行,位置1

如何获取Web API IHttpActionResult响应并序列化c#

试试这个

private void ResponseWebAPI(string strApiAddress) {
    var request = WebRequest.Create(strApiAddress) as HttpWebRequest;
    var response = request.GetResponse() as HttpWebResponse;
    using (Stream stream = response.GetResponseStream()) {
        var reader = new StreamReader(stream, Encoding.UTF8);
        var responseString = reader.ReadToEnd();
        var xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(responseString);
    }
}

我试过你的代码。

  • 首先,您确定收到的是XML而不是JSON。
  • 为了解析XML,您必须编写以下内容:序列化XML响应

我给你的建议是,用HttpClient代替HttpWebRequest,如下所示:

public async Task<Model> GetData(string url)
        {           
            HttpClient httpClient = new HttpClient();
            httpClient.BaseAddress = new Uri(url);
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage result = await httpClient.GetAsync(url);
            if (result.IsSuccessStatusCode)
            {
                string contentResult = await result.Content.ReadAsStringAsync();
                Model newModel = JsonConvert.DeserializeObject<Model>(contentResult);
            }
            return newModel;
        }

设置请求Accept报头为application/json。

request.Accept = "application/json";

然后将响应作为JSON使用。

或者,你可以使用HttpClient,它有一个更简单,更现代的API。

https://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client

public static async Task DoAsync()
{
    var strApiAddress = "http://localhost";
    HttpClient client = new HttpClient();
    var str = await client.GetStringAsync(strApiAddress);
}
public static void Do()
{
    var strApiAddress = "http://localhost";
    HttpClient client = new HttpClient();
    var str = client.GetStringAsync(strApiAddress).Result;
}