C# 具有DisableRequestSizeLimit的ASP.NET核心测试方法

C# 具有DisableRequestSizeLimit的ASP.NET核心测试方法,c#,testing,asp.net-core,httprequest,integration-testing,C#,Testing,Asp.net Core,Httprequest,Integration Testing,我有一个ASP.NET核心项目,使用以下方法: 公共异步任务文件( [ModelBinder(typeof(JsonModelBinder))]请求到请求, 文件1, 文件2 ) 在我推送该方法之后,性能测试失败了,因为他在请求中发送了非常大的文件 因此,我在方法中添加了DisableRequestSizeLimit: [DisableRequestSizeLimit] 公共异步任务文件( [ModelBinder(typeof(JsonModelBinder))]请求到请求, 文件1, 文件

我有一个ASP.NET核心项目,使用以下方法:

公共异步任务文件(
[ModelBinder(typeof(JsonModelBinder))]请求到请求,
文件1,
文件2
)
在我推送该方法之后,性能测试失败了,因为他在请求中发送了非常大的文件

因此,我在方法中添加了
DisableRequestSizeLimit

[DisableRequestSizeLimit]
公共异步任务文件(
[ModelBinder(typeof(JsonModelBinder))]请求到请求,
文件1,
文件2
)
现在,我想为这个bug编写一个测试


如何用一个非常大的主体来伪造请求?

使用nuget包编写此类测试非常方便。您的测试将向您的
Asp.net核心
应用程序发出真正的http请求:

var client = new RestClient("http://path/to/api/");

var request = new RestRequest("resourceurl", Method.POST);

byte[] fileByteArray = new byte[50*1024*1024]; // 50 MB
request.AddFileBytes("file1", fileByteArray, "file1Name"); 

// execute the request
IRestResponse response = client.Execute(request);
var content = response.Content; // raw content as string

顺便说一句,默认情况下asp.net核心应用程序的请求大小限制为28.6 MB。您可以通过
[DisableRequestSizeLimit]
禁用它(就像您所做的那样),然后您可以使用任何负载大小发出请求,但这通常是一种不需要的行为。然后,可能最好使用
[RequestSizeLimit(50_000_000)]
将默认限制更改为所需的值。

可能您没有达到请求大小限制,而是达到表单大小限制;请尝试使用
RequestFormLimits(MultipartBodyLengthLimit=Int32.MaxValue)

请注意,
MultipartBodyLengthLimit
是长类型的,考虑到您的情况,我认为完全填写表单大小限制是公平的。

为什么使用
[RequestSizeLimit(50\u 000)]
而不是
[DisableRequestSizeLimit]
会增加请求大小?有默认值吗?是的,默认情况下asp.net core限制为3000000字节,大约为28.6MB。如果我设置
[DisableRequestSizeLimit]
,它实际上将大小限制设置为默认值?否。默认情况下,asp.net core应用程序的请求大小限制为28.6MB。您可以通过
[DisableRequestSizeLimit]
禁用它,然后您可以使用任何负载大小发出请求,但这通常是一种不需要的行为
[RequestSizeLimit(50_000_000)]
允许配置该限制。从您的回答中,我可能理解
RequestSizeLimit
增加
DisableRequestSizeLimit
的允许大小。我认为这不是问题的答案。但今天它是!