.NET 性能最佳做法:首选ReadFormAsync而不是Request.Form

请使用 HttpContext.Request.ReadFormAsync,而不是 HttpContext.Request.Form。HttpContext.Request.Form 只有在以下状况下才能安全读取:

  • 通过调用 ReadFormAsync 读取了窗体,并且

  • 在使用 HttpContext.Request.Form 读取缓存的窗体值.

请勿这样做:下面的示例使用 。HttpContext.Request.Form 使用HttpContext.Request.Form,可能会导致线程池资源不足。

public class BadReadController : Controller{    [HttpPost("/form-body")]    public IActionResult Post()    {        var form =  HttpContext.Request.Form;
        Process(form["id"], form["name"]);
        return Accepted();    }

请这样做:下面的示例使用 异步读取窗体正文。

public class GoodReadController : Controller{    [HttpPost("/form-body")]    public async Task<IActionResult> Post()    {       var form = await HttpContext.Request.ReadFormAsync();
        Process(form["id"], form["name"]);
        return Accepted();    }