2

Web サービスをデバッグするときは、提供されているデフォルトの WSDL インターフェースを使用して関数をテストできます。これにより、パラメーターにいくつかの値を入力できます。これは非常に便利ですが、XML のみを出力します。この段階でさらに多くのオプションを有効にすることはできますか? (JSON、CSV)

または、それが不可能な場合は、API 呼び出しに追加のパラメーターを追加したいのfiletype=[json,csv]ですが、これをその形式で書き戻すにはどうすればよいでしょうか? 文字列として渡しますか?

4

2 に答える 2

2

WCFを使用していると思います。XMLまたはJSONの結果から選択できる簡単な方法がいくつかあります。1つは異なるエンドポイントを持つことであり、もう1つは異なるメソッドを持つことです。2番目のオプションは、API呼び出しにパラメーターを含めるという要求に対応しますが、両方について簡単に説明します。以下のエンドポイントを検討してください。

    <endpoint address="/rest/" behaviorConfiguration="web" binding="webHttpBinding" contract="WebApplication1.Interface.ITestRest" />
    <endpoint address="/json/" behaviorConfiguration="web" binding="webHttpBinding" contract="WebApplication1.Interface.ITestJson" />
    <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" contract="WebApplication1.Interface.ITestBoth" />

最初の2つは、エンドポイントで区別するためのオプション1に関連しています(/rest/または/json/のいずれかがメソッドの前のURLに含まれ、両方のインターフェイスで同じ署名を定義できるため、一度だけ実装できます)。最後の1つは、オプション2に関連しており、インターフェイスに2つのメソッドがあります。上記のインターフェースのサンプルセットを次に示します。

[ServiceContract]
public interface ITestJson
{
  [OperationContract, WebInvoke(Method = "GET", UriTemplate = "/Echo/{Text}",
    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
  string Echo(string Text);
}

[ServiceContract]
public interface ITestRest
{
  [OperationContract, WebInvoke(Method = "GET", UriTemplate = "/Echo/{Text}",
    RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
  string Echo(string Text);
}

[ServiceContract]
public interface ITestBoth
{
  [OperationContract, WebInvoke(Method = "GET", UriTemplate = "/Echo?Text={Text}&Format=json",
    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
  string EchoJ(string Text);
  [OperationContract, WebInvoke(Method = "GET", UriTemplate = "/Echo?Text={Text}&Format=xml",
    RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
  string EchoR(string Text);
}

次に、これを実装するクラス:

public class Signature : ITestJson, ITestRest, ITestBoth
{
  public string Echo(string Text)
  {
    return Text;
  }

  public string EchoR(string Text)
  {
    return Text;
  }

  public string EchoJ(string Text)
  {
    return Text;
  }

これで、これを次の方法で使用できます。

Service1.svc/json/echo/xxx
Service1.svc/rest/echo/xxx

Service1.svc/echo?Text=xxx&Format=json
Service1.svc/echo?Text=xxx&Format=rest

冒頭で述べたように、これらはXMLまたはJsonを選択するためのいくつかの簡単な方法です。あなたのリクエストはCSVも要求しました。現在、CSVを返す簡単な方法はありません。TXTを返すことができるCodePlexでこのプロジェクトを見つけましたが、チェックアウトしていません。

于 2012-07-04T23:26:46.737 に答える
1

ASP.NET MVC 3 を使用して、JsonResult を返すアクションを作成することをお勧めします。このアクションは WebMethod を実行し、結果を JSON としてシリアル化できます。(これは JSON のみです)。

柔軟性を高めるために、ASP.NET (Web フォーム) Generic Handler を使用できます。これにより、応答の種類と内容を細かく制御できます。

また、ASP.NET MVC 4 の Web API 機能を検討することもできます。これにより、幅広い一連の要求と応答の形式が有効になります。

このスタック オーバーフロー スレッドは、JsonResult 対 Web API に触れています: MVC4 Web API または MVC3 JsonResult

于 2012-07-04T23:33:31.897 に答える