c# - WebApi 在过滤器中获取帖子原始正文

标签 c# asp.net-mvc asp.net-web-api

我正在创建一个日志,我需要检索请求正文以保存在数据库中。我用 HttpActionContext 创建了一个过滤器。 我尝试通过 filterContext.Request.Content.ReadAsStringAsync().Result 进行恢复; 但它总是返回一个空字符串。

日志过滤器.cs

public override void OnActionExecuting(HttpActionContext filterContext)
    {
        try
        {
            Task<string> content = filterContext.Request.Content.ReadAsStringAsync();
            string body = content.Result;

            logModel.RequestLog rl = new logModel.RequestLog();
            rl.IP = ((HttpContextWrapper)filterContext.Request.Properties["MS_HttpContext"]).Request.UserHostAddress;
            rl.Type = filterContext.ControllerContext.RouteData.Values["controller"].ToString().ToUpper();
            rl.URL = filterContext.Request.RequestUri.OriginalString;
            rl.Operation = filterContext.Request.Method.Method;
            rl.RequestDate = DateTime.Now;


            filterContext.ControllerContext.RouteData.Values.Add("reqID", new deviceLog.RequestLog().Add(rl).ID.ToString());
        }
        catch { }
        //return new deviceLog.RequestLog().Add(rl);
        base.OnActionExecuting(filterContext);
    }

最佳答案

也许请求流已经结束。尝试将流位置重置为开头:

public class MyAttribute:ActionFilterAttribute
{
    public override void OnActionExecuted(HttpActionContext actionContext)
    {
        string rawRequest;
        using (var stream = new StreamReader(actionContext.Request.Content.ReadAsStreamAsync().Result))
        {
            stream.BaseStream.Position = 0;
            rawRequest = stream.ReadToEnd();
        }
    }
}

关于c# - WebApi 在过滤器中获取帖子原始正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32339283/

相关文章:

odata - Web API 2.2 - OData v4 ODataQueryOptions.applyTo() 在 $select 或 $expand 存在时返回 null?

c# - 如何在 C# 中从 activex 或 dll 调用 javascript 函数

c# - 文件信息到 WIN32_FIND_DATAW

c# - Asp.NET MVC 中的强类型 View 与普通 View 与局部 View

asp.net-mvc - 区域是我要找的吗?

c# - WebAPI 异步方法错误

asp.net - 命名管道引用不适用于 ASP.NET MVC 4

c# - 如何从原始心电图数据写入 DICOM 文件

c# - WPF ViewModel 中的 CaSTLe Windsor 构造函数注入(inject)

c# - 不在 sportsstore asp.net mvc 5 中实现接口(interface)