1

私はこの問題に関するすべての投稿を読みましたが、何も問題を解決しませんでした。誰かがそれを手伝ってくれたら嬉しいです。

私が追加したWebサービスを備えたMVC3プロジェクトがあります。Testという関数は1つしかなく、HTTP GETメソッド(通常のURL)を介して呼び出すと、JSONではなくXML形式でデータが返されます。JSONを返すようにするにはどうすればよいですか?

Webサービス:

namespace TestServer
{
    [WebService]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class TestWebservice : System.Web.Services.WebService
    {  
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        [WebMethod]
        public List<string> Test()
        {    
            return new List<string>
                {
                    {"Test1"},
                    {"Test2"}
                };                    
        }
    }
}

web.config(関連する部分のみ):

<configuration>
  <location path="TestWebservice.asmx">
    <system.web>
      <webServices>
        <protocols>
          <add name="HttpGet"/>
        </protocols>
      </webServices>
    </system.web>
  </location>  
  <system.web>
    <webServices>
      <protocols>
        <clear/>
      </protocols>
    </webServices>
    <httpHandlers>
      <remove verb="*" path="*.asmx"/>
      <add verb="*" path="*.asmx"
        type="System.Web.Script.Services.ScriptHandlerFactory"
        validate="false"/>
    </httpHandlers>
  </system.web>
</configuration>


URL:

http://localhost:49740/testwebservice.asmx/Test


結果(これは私が望むものではありません):

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
  <string>Test1</string>
  <string>Test2</string>
</ArrayOfString>


誰かが私を助けてくれたら嬉しいです。

4

2 に答える 2

3

application/jsonリクエストを送信するときに、コンテンツタイプのHTTPヘッダーを指定する必要があります。たとえば、jQuery AJAXを使用している場合は、次のように実行できます。

$.ajax({
    url: '/testwebservice.asmx/Test',
    type: 'GET',
    contentType: 'application/json',
    success: function(result) {
        alert(result.d[0]);
    }
});

[ScriptMethod]また、属性でGET動詞を有効にする必要があります。

[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
[WebMethod]
public List<string> Test()
{
    return new List<string>
    {
        {"Test1"},
        {"Test2"}
    };
}

web.configまた、このサービスについてあなたが入れたすべてのものを取り除くことができます。それは必要はありません。

ちなみに、従来のASMXWebサービスは廃止されたテクノロジーです。JSON、WCF、さらには最先端のASP.NET MVC 4 WebAPIを返すASP.NETMVCコントローラーアクションなど、より新しいテクノロジを使用する必要があります。

于 2012-06-27T08:41:12.757 に答える
0

RESTサービスは、クライアントから送信されたAcceptヘッダーに基づいて、特定の形式(XML、JSON)でデータをシリアル化します。Acceptクライアントが受け入れることができるフォーマットをサービスに伝えるヘッダーです。

ブラウザのURLから直接サービスにアクセスしようとすると、Acceptヘッダーの値は以下のようにデフォルト値に設定されます(Firefoxの場合)

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

上記のヘッダーは、html、xhtml、またはxmlを受け入れることができることを明示的に示しています。application/xml形式は明示的に指定されていますが、application/jsonRESTサービスはデータをxml形式で返しません。(しかし、私は何の使用法を理解していませんResponseFormat = ResponseFormat.Json)。

したがって、サービスがJSONデータを返すようにする場合は、acceptヘッダーを対応する形式で指定する必要があります。jQueryを使用している場合は$.getJSON()、acceptヘッダーをとして設定するを利用できます。または、として使用する"application/json"こともできます。$.ajaxdataTypejson

http://prideparrot.com/blog/archive/2011/9/returning_json_from_wcfwebapi

于 2012-06-27T10:11:42.177 に答える