如何获取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
试试这个
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-clientpublic 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;
}