Как я могу включить больше форматов вывода в дополнение к стандартному XML?

2

При отладке веб-службы я могу проверить функции, используя предоставленный по умолчанию интерфейс WSDL, который позволяет мне вводить некоторые значения параметров. Это очень удобно, но выводит только XML. Можно ли включить на этом этапе больше опций? (JSON, CSV)

Или, если это невозможно, я хотел бы добавить дополнительный параметр к вызову API filetype=[json,csv], но как бы записать его в этом формате? Я передаю его как строку?

Теги:
wsdl

2 ответа

2
Лучший ответ

Я предполагаю, что вы используете WCF. Существует несколько простых способов выбора между результатами XML или JSON. Один из них - иметь разные конечные точки, а другой - разные методы. Второй вариант предусматривает, что ваш запрос включает параметр вызова 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" />

Первые два относятся к опции 1 для дифференцирования по конечной точке (либо/rest/или/json/будут в URL-адресе перед методом, и оба интерфейса могут определять одну и ту же подпись, чтобы ее можно было реализовать только один раз). Последнее относится к варианту 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. Я нашел этот проект в CodePlex, который может вернуть TXT, но я не проверил его.

  • 0
    +1 Спасибо за ваше время. В настоящее время пробую это.
1

Я бы предложил использовать ASP.NET MVC 3 и создать действие, которое возвращает JsonResult. Это действие может выполнить ваш WebMethod и сериализовать ваши результаты как JSON. (это только для JSON).

Для большей гибкости вы можете использовать общий обработчик ASP.NET(Web Forms), который дает вам большой контроль над типом ответа и контентом.

Вы также можете рассмотреть возможности веб-API в ASP.NET MVC 4. Он позволяет использовать широкий набор форматов запросов и ответов.

Этот поток затрагивает JsonResult и Web API: веб-API MVC4 или MVC3 JsonResult

  • 0
    +1 Спасибо за ответ. Есть ли у вас какие-либо советы о том, как создать возможности, предоставляемые WCF с использованием веб-API? Мне особенно интересен созданный им автоматический интерфейс, который позволяет мне играть с API. Есть ли параллель с этим в MVC4?
  • 0
    Здесь есть несколько примеров: asp.net/web-api/samples
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню