加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-web-api – 从ExceptionLogger引用操作参数

发布时间:2020-12-16 04:36:06 所属栏目:asp.Net 来源:网络整理
导读:我想要使??用新方法来记录全局日志错误.我编写了一个继承ExceptionLogger的类并重写了Log()方法.然后将其注册为替代品. public class TraceExceptionLogger : ExceptionLogger{ public async override void Log(ExceptionLoggerContext context) { // This i
我想要使??用新方法来记录全局日志错误.我编写了一个继承ExceptionLogger的类并重写了Log()方法.然后将其注册为替代品.
public class TraceExceptionLogger : ExceptionLogger
{
    public async override void Log(ExceptionLoggerContext context)
    {
        //  This is always empty string
        var content = await context.Request.Content.ReadAsStringAsync();

        //  This is almost always null
        var actionContext = context.ExceptionContext.ActionContext;
    }
}

我可以通过ExceptionLoggerContext对象的属性来获取我需要的所有东西,除了动作参数.确实有一个ActionContext属性,但我只看到它为null,this wiki page表示ActionContext和ControllerContext几乎总是为null.

此外,我无法获取内容流,因为它的流已经在它到达我的记录器之前被读取.因此,我无法从请求的内容中获取任何已发布的json.

有没有办法从HttpContext.Current或其他方式获取发布的数据?

解决方法

好吧,看起来我可以通过在Request对象上读取InputStream来获取HttpContext中的正文文本,如下所示:
string bodyText = string.Empty;

using (var sr = new StreamReader(HttpContext.Current.Request.InputStream))
{
    sr.BaseStream.Seek(0,SeekOrigin.Begin);
    bodyText = sr.ReadToEnd();
}

到目前为止,这段代码已成功获取我发布的json数据.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读