我无法弄清楚HttpClient脚本出了什么问题。
当我使用Fiddler时,它可以正常工作AspNetCore MVC不会抛出错误。
http://localhost:6004/api/XUnitExamplesTest/JsonStringMethod
Http-Get
User-Agent: Fiddler
Accept: text/json
Content-Type: text/json
Host: localhost:6004
Content-Length: 24
"{\"Color\": \"Green\"}"
但HttpClient脚本导致AspNetCore MVC问题。
var sampleData = new XUnitSampleData() { Color = "Red" };
var contentType = "text/json";
var httpMethod = HttpMethod.Get;
var uriPath = "JsonStringMethod";
var jsonData = JsonConvert.SerializeObject(_sampleData, Formatting.None).ToString(); // JSON String. --> "{ \"Vin\" : \"foo\", \"Color\" : \"foo\" }"
var jsonRequest = string.Format("\"{0}\"", jsonData);
var result = await XUnitWebClient.GetAsync3(contentType, httpMethod, uriPath, jsonRequest, CancellationToken.None);
public static async Task<string> GetAsync3(string contentType, HttpMethod httpMethod, string uriPath, string request, CancellationToken cancellationToken)
{
using (var httpClient = new HttpClient())
{
using (var httpRequestMessage = new HttpRequestMessage(httpMethod, string.Format("{0}{1}", _uri, uriPath)))
{
httpClient.BaseAddress = new Uri(string.Format("{0}", _baseAddress));
//httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType)); // "Accept" Header.
//httpClient.DefaultRequestHeaders.Remove("Content-Type");
//httpClient.DefaultRequestHeaders.Add("Content-Type", contentType);
httpRequestMessage.Content = new StringContent(request, Encoding.UTF8, contentType); // "Content-Type" Header.
var response = await httpClient.SendAsync(httpRequestMessage);
return await response.Content.ReadAsStringAsync();
}
}
}
AspNetCore MVC将JSON值设为"{"
。
由于我正在使用text / json,所以如何告诉HttpClient发送带有开头引号和结束引号的json字符串,而不是将其剥离出去?
或者我在这里使用JsonConvert.SerializeObject()做错了什么?
答案 0 :(得分:3)
直接回答这个问题......
您没有逃避 JSON字符串中的引号。试试这个:
var jsonRequest = string.Format("\"{0}\"", jsonData.Replace("\"", "\\\""));
<强>然而... 强>
我怀疑你是如何解决这个问题的。您在评论中提到,如果您不在客户端对字符串进行字符串化,则会在服务器端(在您的MVC代码中)出现错误。但是,要求客户端执行此操作非常尴尬和非标准。我会:
将内容类型从text/json
更改为application/json
。这不会解决问题,但它是标准。
删除上面的行并直接发送jsonData
。即不要将JSON字符串化。
提出一个新问题,了解如何解决您获得的服务器端错误,并发布相关的MVC代码。