【发布时间】: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