1

411 Length Required 请求没有指定其内容的长度,这是所请求的资源所要求的。

我有以下代码:

    [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");
        }

当请求大小超过 9999999 时,它会起作用并返回 411 状态码。

但是我想在将整个请求上传到服务器之前对其进行验证(据我所知,如果服务器无法处理它,请感知这个 411 状态代码以防止上传大文件)。如何在将整个请求发送到服务器之前拒绝请求并发送 411 状态码?

4

1 回答 1

1

如果要在将请求发送到 Web API 之前验证大小,则需要在 Web API 客户端级别进行。
但是,如果您想在执行 Web api 控制器中的操作之前执行验证,您可以使用操作过滤器。通常,涉及以下步骤。

  • ActionFilterAttribute通过继承类为 Web API 创建自定义操作过滤器 。
  • 重写 OnActionExecuting方法并编写代码以检查内容长度并在方法定义中返回适当的错误代码。
  • WebApiConfig 在文件中注册自定义过滤器。
  • 使用您的自定义属性装饰您要应用此过滤器的操作

请参阅链接以了解分步实施。

于 2016-03-18T04:59:15.857 回答