WebAPI 和状态代码 411 "Length Required"

WebAPI and status code 411 "Length Required"

411 Length Required The request did not specify the length of its content, which is required by the requested resource.

我有以下代码:

    [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 时,它工作 return 411 状态代码。

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

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

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

参考this link一步步实施。