WebApi Custom MediaTypeFormatter获取发布的参数

时间:2014-12-22 13:17:07

标签: json asp.net-web-api asp.net-web-api2

我通过传入序列化的JSON DTO来调用webapi上的帖子操作。

我还有一个自定义媒体类型格式化程序来加密结果数据。但是在WriteToStreamAsync方法中,如何获取已发布的参数?

自定义媒体类型格式化程序类

public class JsonFormatter : JsonMediaTypeFormatter
{


    public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext)
    {
        var taskSource = new TaskCompletionSource<object>();
        try
        {
            if (value != null)
            {
               //How to get posted parameters?
            }
        }
        catch (Exception e)
        {
            taskSource.SetException(e);
        }
        return taskSource.Task;
    }
}

}

2 个答案:

答案 0 :(得分:0)

我设法通过HttpContext.Current.Request.InputStream

获取它

答案 1 :(得分:0)

在这种情况下,通常无法使用HttpContext.Current,因为它不一定总是可用于async通话。

相反,请执行以下操作:

    public class JsonFormatter : JsonMediaTypeFormatter
    {
        private readonly HttpRequestMessage request;

        public JsonFormatter() { }
        public JsonFormatter(HttpRequestMessage request)
        {
            this.request = request;
        }

        public override MediaTypeFormatter GetPerRequestFormatterInstance(Type type, HttpRequestMessage request, MediaTypeHeaderValue mediaType)
        {
            return new JsonFormatter(request);
        }

        public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext)
        {
            // logic referencing this.request
        }
    }