【问题标题】:How to validate request before file upload using ASP.NET Core如何在使用 ASP.NET Core 上传文件之前验证请求
【发布时间】:2020-07-24 20:48:13
【问题描述】:

我有这个上传文件的代码。 我的问题是 AuthorizationCheck 仅在文件上传后才会触发。 如果文件大于 20MB,AuthorizationCheck 根本不会触发,请求将返回 404。 是否可以在发送文件蒸汽之前验证 请求标头? 如果请求未经授权,则应阻止文件上传到服务器。 也不清楚为什么当我上传一个大文件时它被完全上传,然后才返回 404...

            [RequestSizeLimit(21_000_000)]
            [Authorize(Policy = "AuthorizationCheck")]
            public async Task<IActionResult> Upload(IFormFile file)
            {
    
                using (var stream = file.OpenReadStream())
                {
                    await StoreFileAsync(stream);
                }
             }

【问题讨论】:

    标签: asp.net .net asp.net-core


    【解决方案1】:

    [RequestSizeLimit(21_000_000)] 限制您的请求不能超过 20MB,您可以改用[DisableRequestSizeLimit]

    此外,IIS 还施加了一个限制,默认为 30MB。当超出此大小限制时,IIS 本身会生成 404 响应。要更改 IIS 的限制,您应该自定义 Web.configure

    更多详情可以参考this answer

    更新数据

    您可以在custom middleware 中访问请求标头:

    app.Use(async (context, next) =>
    {
        var header = context.Request.Headers["XXX"];
    
        //do something
        
        await next();
    });
    

    【讨论】:

    • 谢谢,但我不关心请求大小。问题是关于请求标头的。
    • 很遗憾,您的回答无效。仅在文件上传后才会触发中间件。如果大文件超过大小限制,则根本不会触发中间件。我不想在文件上传之前阻止它,而不是之后。
    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多