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 файл.
  • Украсьте действие, для которого вы хотите применить этот фильтр, с помощью пользовательского атрибута.

Обратитесь к этой ссылке для пошаговой реализации.

Другие вопросы по тегам