Передача сложных параметров с помощью веб-API MVC4 RESTful - PullRequest
2 голосов
/ 23 февраля 2012

Я пытаюсь отправить сложный объект в контроллер веб-API MVC4:

public class DnsController : ApiController
{

        public IEnumerable<DnsARecord> GetDnsARecords(DnsServer dnsServer, string domainName)
        {...

, и я ожидаю вызова этого из HttpClient:

var httpClient = new HttpClient();

        // Send a request asynchronously continue when complete
        httpClient.GetAsync(dnsApiUrl).ContinueWith(...

приведенный выше код, который я позаимствовал из примера "Введение в HttpClient" - код указан на странице.

Мне было интересно, как мне передать два параметра.Я предполагаю, что требуется некоторая предварительная обработка.

Ответы [ 3 ]

1 голос
/ 19 марта 2012

Вы можете передать столько параметров, сколько хотите в строке запроса HTTP-GET. Просто нужно добавить шаблон маршрута на сервер.

var server = new HttpSelfHostServer();
server.Routes.MapHttpRoute("DnsQuery", "api/{controller}/dnsserver={DnsServer}&domain={domainName}");

Значения, переданные для dnsserver и domain, теперь будут сопоставлены с параметрами вашего метода GET.


Edit: Кроме того, вы также можете передавать сложные объекты в теле HTTP POST. Вы можете выбрать один из трех собственных форматов: JSON, XML или UrlEncoded Query String. MVC4 знает, как сопоставить эти форматы данных с простыми переменными, такими как строки (просто убедитесь, что имена элементов XML имеют то же имя, что и параметр, с которым вы хотите их сопоставить. Также клиент, отправляющий запрос, должен убедиться, что тип содержимого установить правильное значение (Application / JSON, Text / XML, application / x-www-form-urlencoded).

<DnsInfo>
    <DnsServer>0.0.0.0</DnsServer>
    <Domain>YourDomain.com</Domain>
</DnsInfo>

Вы также можете создать сложный тип, и он будет удален в него

void Post(DnsInfo info) : ApiController
{
}

public class DnsInfo
{
    public string DnsServer { get; set; }
    public string Domain { get; set; }
}

Преимущества этого метода в том, что он поможет, если у вас слишком много параметров, вместо этого будет лучше организовать их в классы. Кроме того, если вы передаете какую-либо конфиденциальную информацию, вы не хотите использовать строки запроса в URL-адресе, поскольку они могут кэшироваться браузерами и т. Д.

0 голосов
/ 24 апреля 2012

Вы должны оставить один входной параметр для вашего метода API и предоставить все дополнительные параметры, используя параметры URL.

И вызовите ваш метод следующим образом:

  http:/localhost/MyApp/Dns/GetDnsARecords/ns1.x.com?domainName=mywebsite.com

В вашем методе вы просто поймаете значение, выполнив

   var domainName = HttpContext.Current.Request["domainName"];
0 голосов
/ 27 февраля 2012

Я думаю, что для получения сообщений, вы запрашиваете данные должны идти в URL. Может быть, вы можете использовать URL Form Formatter? Как выглядит API?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...