我目前正在向API发布一个json字符串,以接收包含各种值的对象。
这是我发布的json字符串:
{"SomeProperty":1,"DimensionOne":4,"DimensionTwo":6,"IdNumber":0}
现在我没有Json字符串本身的问题,因为我已经在Fiddler中测试了这个字符串到api,它完全正常,返回我需要的所有值。
我正在做的事与Fiddler正在做的事情之间的唯一区别是我将从脚本转到发布到API的WebService。
以下是我用于WebService的代码:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public ObjectType Relay(string json)
{
const string url = "https://api.com";
var client = new HttpClient {BaseAddress = new Uri(url)};
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.PostAsJsonAsync("api/v1/GetObject", json).Result;
if (response.IsSuccessStatusCode)
{
var objectRequest = Task.FromResult(response.Content.ReadAsStringAsync());
return JsonConvert.DeserializeObject<ObjectType>(objectRequest.Result.Result);
}
return null;
}
}
到目前为止它只返回null(显然是因为response.IsSuccessStatusCode不为TRUE)
但是当我注释掉if括号并删除返回null时,它在我应该接收数据时给了我一个空对象。所有输入都是正确的。
我想知道我是否应该使用除PostAsJsonAsync之外的方法,或者我还应该对json字符串或json标头做什么。
同样,json字符串的格式正确,因为它与Fiddler一起使用,之前在从网站直接进入API(没有WebService)时工作。
我很感激任何建议。提前谢谢。
答案 0 :(得分:1)
您正在发送https请求。虽然客户端证书在协议中是可选的,但是如果服务器需要,您需要HttpClient 的证书:Make Https call using HttpClient