PostAsJsonAsync返回null

时间:2015-05-08 13:28:40

标签: c# asp.net json asmx fiddler

我目前正在向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)时工作。

我很感激任何建议。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您正在发送https请求。虽然客户端证书在协议中是可选的,但是如果服务器需要,您需要HttpClient 的证书Make Https call using HttpClient