我喜欢在调用API操作时根据查询字符串参数设置API操作的MaxRequestBodySize.

比如说:

    [HttpPost("{para1}")]
    [RequestSizeLimit(...when para1 = "a" ? 500MB : 50MB)]
    public void PostIt(string para1, [FromBody] string bodyContent)
    {
        // do stuff
    }

然而,使用RequestSizeLimit属性这是无法做到的,我想中间件应该可以做到这一点,但我必须承认,到目前为止还没有找到任何有效的解决方案.

从技术上讲,这是可能的吗?我该如何实现这个目标?

我正在使用.净额6.0

推荐答案

如果要为API操作设置MaxRequestBodySize,使用RequestSizeLimit是正确的 Select .但通常情况下,参数应该是数字.例如,下面的代码将允许PostIt接受高达

[HttpPost]                                     
[RequestSizeLimit(30_000_000)]                   
public void PostIt(string para1, [FromBody] string bodyContent)                        
{

我看到您在这里提到了中间件,如果请求不是由MVC操作执行的,那么仍然可以使用IHttpMaxRequestBodySizeFeature修改限制.例如:

app.Run(async context =>                                                               
{                                   
context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = 30_000_000;

无论是否使用中间件,参数都应该是一个数字.因此,我建议编写一个函数来完成目标,然后返回一个数字作为参数.

Csharp相关问答推荐

无法使用并行库并行化我的代码

是否可以将gltf转换为字节数组,然后将字节数组转换回文件?

为什么.Equals(SS,StringComparison. ClientCultureIgnoreCase)在Net 4.8和6.0之间不同?

C#使用属性和值将JSON转换为XML

Microsoft. VisualBasic. FileIO. FileSystem. MoveFile()对话框有错误?

使用命令初始化可绑定属性

(乌龙)1&#比c#中的UL&#慢吗?

如何测量在使用UTF8而不是C#中的UTF16编码字符串时内存使用量的增长

Rider将.NET安装在哪里

Blazorise折线图仅绘制数据集的一部分

在ASP.NET Core Web API项目中通过中间件修改`Request.Path`不会更改使用的控制器/操作

如何通过寻找向量长度来优化两个循环?

在DoubleClick上交换DataGridViewImageColumn的图像和工具提示

.NET 6:如何防止系统生成的日志(log)?

如何让两个.NET版本不兼容的项目对话?

WinUI 3中DoubleCollection崩溃应用程序类型的依赖属性

.Net MAUI,在将FlyoutPage添加到容器之前,必须设置添加构造函数导致Flyout和Detail"

Azure Functions v4中的Serilog控制台主题

如何使用实体框架核心对字符串_agg使用强制转换为varchar(Max)

使用Blazor WebAssembly提高初始页面加载时间的性能