2014-01-24 4 views
1

Я использую ServiceStack с MVC4 и получаю 500 ошибок, когда параметры запроса длинны. Я отправляю ProductIds, разделенные запятыми, контроллеру через AJAX. В контроллере у меня есть следующий вызов API-интерфейса servicestack для извлечения данных.ServiceStack запрос дает 500 для большого запроса

ResponseDTO res = restClient.Get(new RequestDTO { ProductIDs = ids}); 
//ResponseDTO res = restClient.Get(new RequestDTO { ProductIDs = "1234,1235,1236"}); 

Если я представляю небольшие параметры выше, он отлично работает без ошибок. Но когда строка параметра находится в диапазоне от 1800 символов, он просто не будет работать на линии выше и дает 500 Внутренняя ошибка сервера:

NetworkError: 500 Internal Server Error - http://localhost/Products/GetProducts 

Exception Details: ServiceStack.ServiceClient.Web.WebServiceException: Not Found 

является ли ограничение на метод GET для размещения большого запроса параметров? Почему это не удается для большого запроса, когда для небольших параметров он успешно вызывает API, извлекает данные с помощью процедуры SQL и отправляет для просмотра правильно. Что я могу рассмотреть, чтобы решить эту проблему? Спасибо!

p.s. когда я отлаживаю через VS2012, я вижу детали исключения. Я вижу сообщение: не найдено и код состояния: 404.

+3

Вы не должны использовать запросы GET с длинными данными. В разных браузерах URL-адреса имеют разные ограничения длины. Некоторые браузеры не поддерживают запросы GET более чем на 2 КБ, которые «приближаются к 1800 символам». Что произойдет, если вы ПОСТ? Это может быть проблемой с ServiceStack, но это маловероятно, так как класс 'string' будет легко обрабатывать 2000 символов. – Scott

+0

Я не могу воспроизвести ошибку. Пожалуйста, разместите свой DTO. Мне удалось отправить строку длиной не менее 13000 символов без использования GET. – Scott

+0

У нас есть методы GET в проектах Services как интерфейс и havent реализованы POST. Поэтому я получаю ошибку «Метод не разрешен». Я постараюсь изменить POST все места и посмотреть, работает ли он. и да, они являются строками и сериализуются при публикации через AJAX json. – user704988

ответ

1

Как упомянуто выше Scott, мы пробовали POST для всех методов и исправили проблему. Я знал, что GET имеет ограничение на длину URL-адреса браузера, но не думал, что это имеет значение, поскольку у нас есть инфраструктура ServiceStack, и все их примеры используют GET. Еще раз спасибо Скотту.

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