如何捕获并保存jason数据发布到restful asp.net web api

时间:2014-10-16 05:38:21

标签: c# asp.net json asp.net-web-api

我有这段代码:

[Route]
    public HttpResponseMessage PostData[FromBody] DataModel data)
    {
         ... implementation...
    }

这会自动将json数据绑定/转换为我的数据模型。但是,我想保存/捕获已发布的原始json文件并将其保存以用于日志记录。 关于如何实现这一目标的任何建议?

1 个答案:

答案 0 :(得分:3)

您可以执行以下操作,然后使用JSON转换器将字符串转换为JSON。

[HttpPost]
public HttpResponseMessage PostData([FromBody] string text)
{
   // log text.
    DataModel data = JsonConvert.DeSerialize<DataModel>(text);
}

或者你也可以,

[HttpPost]
public HttpResponseMessage PostData()
{
    string text = Request.Content.ReadAsStringAsync().Result; 
    //log text           
    DataModel data = JsonConvert.DeSerialize<DataModel>(text);
}

由于您提到它是用于日志记录,您可能需要考虑在Web API过滤器或委托处理程序中执行此操作 - 以使逻辑更集中,而不是在每个操作方法中使用逻辑。

public class LogApiRequest : ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            var text =  actionContext.Request.Content.ReadAsStringAsync().Result;
            MyLogger.Log(LogLevel.INFO, text);

            base.OnActionExecuting(actionContext);
        }
    }

然后注册您的过滤器 - 通常在WebApiConfig.cs中或使用过滤器修饰您的操作方法或控制器类。

config.Filters.Add(new LogApiRequest());