我现在将经典的 Asp.Net WebAPI 项目迁移到 Asp.Net Core 。之前,有一个动作过滤器来记录每个响应信息。但它不起作用,因为.net核心中的新body对象不可读。
这是我在asp.net core(2.0)中的代码:
public class Startup (in Startup.cs)
{
public void ConfigureServices(IServiceCollection services)
{
// Added for invoke custome filter
services.AddMvc(options =>
{
options.Filters.Add<ActionLogFilter>();
});
//...
}
//...
}
ActionLogFilter.cs
public class ActionLogFilter : IActionFilter
{
public void OnActionExecuted(ActionExecutedContext actionExecutedContext)
{
//...
var responseBody = ReadResponseBody(actionExecutedContext.HttpContext.Response);
//...
}
private static string ReadResponseBody(HttpResponse response)
{
var initialBody = response.Body;
try
{
using (var reader = new StreamReader(response.Body)) // throw exception here
{
return reader.ReadToEnd();
}
}
catch (Exception ex)
{
return string.Empty;
}
finally
{
response.Body = initialBody;
}
}
}
完整的错误消息:
System.ArgumentException:Stream无法读取。 在System.IO.StreamReader..ctor(Stream stream,Encoding encoding,Boolean detectEncodingFromByteOrderMarks,Int32 bufferSize,Boolean leaveOpen) 在System.IO.StreamReader..ctor(Stream stream)。
我尝试使用MemorySteam但完全没有工作,因为原始对象根本不可读。
有任何想法获取回复详情信息吗?
或其他替代解决方案?