WebAPI和状态码411"长度要求"

时间:2016-03-18 00:59:37

标签: asp.net-web-api asp.net-web-api2 http-status-code-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");
        }

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

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

1 个答案:

答案 0 :(得分:1)

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

  • 通过加入ActionFilterAttribute class。
  • 为Web API创建自定义操作过滤器
  • 覆盖OnActionExecuting方法并编写代码以检查内容长度并在方法定义中返回相应的错误代码。
  • WebApiConfig文件中注册自定义过滤器。
  • 使用自定义属性
  • 装饰要将此过滤器应用于的操作

有关逐步实施的信息,请参阅this链接。