带有DisableRequestSizeLimit的ASP.NET Core测试方法

bar*_*iro 6 c# testing integration-testing httprequest asp.net-core

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

public async Task<ActionResult<ResultDto>> StartReadFiles(
    [ModelBinder(typeof(JsonModelBinder))] RequestDto request,
    IFormFile file1,
    IFormFile file2
)
Run Code Online (Sandbox Code Playgroud)

我推送方法后,进行性能测试失败,因为他在请求中发送了非常大的文件。

所以我DisableRequestSizeLimit在方法中添加了:

[DisableRequestSizeLimit]
public async Task<ActionResult<ResultDto>> StartReadFiles(
    [ModelBinder(typeof(JsonModelBinder))] RequestDto request,
    IFormFile file1,
    IFormFile file2
)
Run Code Online (Sandbox Code Playgroud)

现在,我想为这个错误编写一个测试。

我怎样才能用很大的身体来伪造请求?

Alb*_*rtK 8

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

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
Run Code Online (Sandbox Code Playgroud)

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