【问题标题】:PostAsJsonAsync returning nullPostAsJsonAsync 返回 null
【发布时间】:2015-07-19 10:38:36
【问题描述】:

我目前正在向 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)时也可以使用。

如果有任何建议,我将不胜感激。提前致谢。

【问题讨论】:

  • 您正在发送 https 请求,您需要为您的 HttpClient 提供证书:stackoverflow.com/questions/22251689/…
  • 调查@KhanhTO 感谢您的快速回复
  • @KhanhTO 我建议张贴作为答案 b/c 这很可能是解决方案。我也想给你一个赞成票。
  • 答案对你有用吗?
  • @KhanhTO 啊我忘了更新解决方案。不幸的是,您的解决方案没有解决它,但幸运的是这不是问题。我发送的 json 对象的 Web 方法参数是原因。我稍后会更新完整的答案。

标签: c# asp.net json asmx fiddler


【解决方案1】:

您正在发送一个 https 请求。虽然客户端证书在协议中是可选的,但是您需要为您的 HttpClient 提供证书以防服务器需要它Make Https call using HttpClient

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2020-06-19
    • 2011-10-15
    相关资源
    最近更新 更多