数年前に、モバイル アプリケーション用の .NET Web サービスを開発しました。このサービスは、iPhone/Android/Blackberry/WindowsPhone およびサードパーティによって開発されたすべてのネイティブ アプリによって呼び出されています。JSON のサポートを追加したため、一部のアプリは JSON 呼び出しを使用してこのサービスにアクセスし、一部のアプリは SOAP を使用してアクセスします。
Web サービスは、要求が HTTP ヘッダーで送信された場合にのみ JSON を返しますContent-type: application/json
。
Content-Type
ある Android プラットフォーム (具体的には Galaxy Nexus) で、 GET 要求のヘッダーが欠落しているという問題が発生しました。サード パーティのアプリ開発者は多くの解決策を試しましたが、GET 要求の Content-Type を強制的に送信する方法を見つけることができませんでした。
ただし、ヘッダーが正しく設定されて送信されていることに気付きましたが、そのような場合に JSON を返すAccept
代わりにそのヘッダーを使用するように Web サービスを変更する方法が見つかりませんでした。Content-Type
以下はリクエストの例です。必要に応じて JSON ではなく、XML レスポンスが返されます。
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
また、Web サービス コードからの抜粋:
[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
ヘッダーを調べてそうする方法はありますか? (WCFへの移行以外?)
そうでない場合、アプリケーション開発者から、Spring フレームワークを使用して HTTP リクエストを作成するように言われました。アプリ側で機能させ、Content-Type
GET 要求のヘッダーを強制的に送信する方法についての解決策があれば、それも高く評価されます!
ありがとう!