Sea*_*ean 3 c# asp.net asp.net-core
我有一个错误记录器,可将错误从 API 控制器写入数据库。它有一些这样的代码:
string form = string.Empty;
if (request.Method == "POST")
{
using (StreamReader sr = new StreamReader(request.Body))
{
if (request.Body.CanSeek) request.Body.Seek(0, SeekOrigin.Begin);
if (request.Body.CanRead) form = sr.ReadToEndAsync().Result;
form = sr.ReadToEndAsync().Result;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这无法读取正文,因为它已被读取,并且 ASP.NET Core 不允许您执行此操作。请参阅:https : //devblogs.microsoft.com/aspnet/re-reading-asp-net-core-request-bodies-with-enablebuffering/
我看了看.EnableBuffering和.EnableRewind,但这些都不上存在的HttpRequest(至少在3.0。
app.Use(async (context, next) => {
context.Request.EnableRewind();
await next();
});
Run Code Online (Sandbox Code Playgroud)
如何重新阅读请求正文?
EnableBuffering 存在于 dotnet 3.0 中,只需添加
using Microsoft.AspNetCore.Http;
Run Code Online (Sandbox Code Playgroud)
然后
app.Use(async (context, next) => {
context.Request.EnableBuffering();
await next();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2878 次 |
| 最近记录: |