C# 具有DisableRequestSizeLimit的ASP.NET核心测试方法
我有一个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, 文件
公共异步任务文件(
[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
的允许大小。我认为这不是问题的答案。但今天它是!