在asp.net core

时间:2017-10-13 09:32:18

标签: asp.net-core-webapi asp.net-core-2.0

我现在将经典的 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但完全没有工作,因为原始对象根本不可读。

有任何想法获取回复详情信息吗?

或其他替代解决方案?

0 个答案:

没有答案