gpt4 book ai didi

android - 未指定内容类型时 Web 服务返回 SOAP

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:38 27 4
gpt4 key购买 nike

几年前,我们为移动应用程序开发了 .NET 网络服务。 iPhone/Android/Blackberry/WindowsPhone 和第三方开发的所有 native 应用程序正在调用此服务。我们添加了对 JSON 的支持,因此一些应用程序使用 JSON 调用访问此服务,而一些应用程序使用 SOAP。

仅当请求使用 HTTP header Content-type: application/json 发送时,web 服务才返回 JSON。

我们遇到了一个 Android 平台(特别是 Galaxy Nexus)的问题,其中缺少 GET 请求的 Content-Type header 。我们的第三方应用程序开发人员尝试了很多解决方案,但找不到强制发送 GET 请求的 Content-Type 的方法。

但是,我们确实注意到 Accept header 已正确设置并发送,但我发现无法更改 Web 服务以使用该 header 而不是 Content-Type 在这些情况下返回 JSON。

这里是示例请求,它的结果是 XML 响应,而不是所需的 JSON。

GET /mobile/service.asmx/Logon?system=2&username='test'&password='1234' HTTP/1.1
Accept: application/json
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
Connection: Keep-Alive

并摘自网络服务代码:

    [WebMethod(
BufferResponse = false,
CacheDuration = 0
)]
[ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json) ]
public LogonResponse Logon(int system, string username, string password)
{
return service.Logon(system, username, password);
}

有没有办法以某种方式强制 JSON 响应,或者检查 Accept header 来这样做? (除了迁移到 WCF?)

如果没有,应用程序开发人员告诉我他们使用 Spring 框架来发出 HTTP 请求。如果有关于如何使其在应用程序端工作并强制发送 GET 请求的 Content-Type header 的解决方案,我们也非常感谢!

谢谢!

最佳答案

你可以试试这个(目前无法测试)。

public LogonResponse Logon(int system, string username, string password)
{

string accept = HttpContext.Current.Request.Headers("Accept");
if (!string.IsNullOrEmpty(accept)) {
if (accept.ToLower.EndsWith("application/json")) {
HttpContext.Current.Response.ContentType = "application/json";
}
}
return service.Logon(system, username, password);
}

编辑:将请求更新为响应

关于android - 未指定内容类型时 Web 服务返回 SOAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12483830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com