WebAPI и код состояния 411 "Необходимая длина"
411 Требуемая длина В запросе не указана длина его содержимого, необходимого для запрашиваемого ресурса.
У меня есть следующий код:
[HttpPost]
[Route("UploadFileAsync/{RequestID}")]
public async Task<HttpResponseMessage> UploadFileAsync(int RequestID)
{
SetUser();
long maxAllowedFileSize = 9999999;
long? contentLenght = Request.Content.Headers.ContentLength;
if (!contentLenght.HasValue || contentLenght.Value > maxAllowedFileSize)
{
return Request.CreateErrorResponse(HttpStatusCode.LengthRequired, "Please set content lenght and file size should be less than 10 Mb");
}
Он работает и возвращает код состояния 411, когда размер запроса превышает 9999999.
Но я хотел бы проверить его перед загрузкой всего запроса на сервер (насколько я понимаю, смысл этого кода состояния 411, чтобы предотвратить загрузку больших файлов, если сервер не может его обработать). Как я могу отклонить запрос и отправить код состояния 411 перед отправкой всего запроса на сервер?
1 ответ
Если вы хотите проверить размер перед отправкой запроса в Web API, то вам нужно сделать это на уровне клиента Web API.
Однако, если вы хотите выполнить проверку до того, как будет выполнено действие в вашем веб-контроллере API, вы можете использовать фильтры действий. Как правило, следующие шаги участвуют.
- Создайте пользовательский фильтр действий для веб-API, наследуя
ActionFilterAttribute
учебный класс. - Override
OnActionExecuting
метод и напишите код, чтобы проверить длину содержимого и вернуть соответствующий код ошибки в определении метода. - Зарегистрируйте пользовательский фильтр в
WebApiConfig
файл. - Украсьте действие, для которого вы хотите применить этот фильтр, с помощью пользовательского атрибута.
Обратитесь к этой ссылке для пошаговой реализации.