2013-09-27 2 views
3

Как отправить сложный объект (который может иметь огромные данные) в метод получения веб-API? Я знаю, что могу использовать параметр «FromUri», но поскольку данные слишком большие, я не могу использовать этот параметр. Я хочу использовать функцию «FromBody» пользователя. Но могу ли я отправить данные в метод Get?Web API Получить метод со сложным объектом как параметр

Пожалуйста, наставит меня здесь ... заранее спасибо

ответ

15

Как отправить сложный объект (который может иметь огромные данные) на веб-API Получ?

Вы не можете. Методы GET не имеют тела запроса. Вы должны отправить все в строке запроса, которая имеет ограничения.

Вместо этого вы должны использовать POST.

+0

So In этот случай ... «WCF» - лучший вариант по сравнению с «WebAPI». Потому что публикация огромных данных в GET может быть не очень хорошая идея? –

+3

@KokiralaSudheer, вы не можете публиковать данные в GET :-) Вы противоречите себе. WCF не поможет вам вообще. Я бы рекомендовал вам прочитать спецификацию протокола HTTP и ознакомиться с глаголами GET и POST и, самое главное, с их различиями. Когда вы используете глагол GET, запрос не имеет никакого тела. Вы можете отправлять значения только на сервер с параметрами строки запроса. Если вам нужно отправить огромные данные на сервер, вы должны использовать POST. –

+0

@KokiralaSudheer Подумайте об этом так: 'GET: предоставил URL-адрес, получит некоторые данные.' 'POST: предоставил URL-адрес и некоторые данные, отправит некоторые данные и вернет некоторые данные в ответ.' –

1

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

[HttpPost] 
public HttpResponseMessage MyMethod([FromBody] MyComplexObject body) 
{ 
    try 
    { 
     // Do stuff with 'body' 
     myService.Process(body); 
    } 
    catch (MyCustomException) 
    { 
     return new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent("FAILED") }; 
    } 

    return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("OK") }; 
} 

Если данные POSTING больше 4MB, то вам нужно настроить web.config настроить IIS, чтобы принять больше, тем ниже пример устанавливает maxRequestLength и maxAllowedContentLength 10Мб:

<system.web> 
    <httpRuntime maxRequestLength="10240" /> 
</system.web> 

и

<system.webServer> 
     <security> 
      <requestFiltering> 
      <requestLimits maxAllowedContentLength="10485760" /> 
      </requestFiltering> 
     </security> 
</system.webServer> 
+0

So In этот случай ... «WCF» - лучший вариант по сравнению с «WebAPI». Потому что публикация огромных данных в GET может быть не очень хорошая идея? –

+0

Вы не можете получать данные POST с помощью HTTP GET, вы ограничены URI, который обычно меньше 2000 символов. Если вам нужно отправить POST большое количество данных в конечную точку службы, вы должны сделать это с помощью HTTP POST и поместить данные в тело. –

+0

Я бы не стал сравнивать WCF или Web API. Каждый из них имеет свое надлежащее применение. –

0

использование OData может быть, его отлично подходит для не слишком больших объектов

https://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api

Или использовать FromUri, как показано ниже

общественного MethodName Get ([FromUri] модель Модель, внутр страница, внутр PAGESIZE)

Смежные вопросы