public override void WriteToStream(Type type, object value, Stream stream, HttpContentHeaders contentHeaders) { BufferedMediaTypeFormatter innerFormatter = InnerBufferedFormatter; MediaTypeHeaderValue contentType = contentHeaders == null ? null : contentHeaders.ContentType; _innerTracer.TraceWriter.TraceBeginEnd( _innerTracer.Request, TraceCategories.FormattingCategory, TraceLevel.Info, _innerTracer.InnerFormatter.GetType().Name, OnWriteToStreamMethodName, beginTrace: (tr) => { tr.Message = Error.Format( SRResources.TraceWriteToStreamMessage, FormattingUtilities.ValueToString(value, CultureInfo.CurrentCulture), type.Name, contentType == null ? SRResources.TraceNoneObjectMessage : contentType.ToString()); }, execute: () => { innerFormatter.WriteToStream(type, value, stream, contentHeaders); }, endTrace: null, errorTrace: null); }
public override object ReadFromStream(Type type, Stream stream, HttpContent content, IFormatterLogger formatterLogger) { BufferedMediaTypeFormatter innerFormatter = InnerFormatter as BufferedMediaTypeFormatter; HttpContentHeaders contentHeaders = content == null ? null : content.Headers; MediaTypeHeaderValue contentType = contentHeaders == null ? null : contentHeaders.ContentType; object value = null; _innerTracer.TraceWriter.TraceBeginEnd( _innerTracer.Request, TraceCategories.FormattingCategory, TraceLevel.Info, _innerTracer.InnerFormatter.GetType().Name, OnReadFromStreamMethodName, beginTrace: (tr) => { tr.Message = Error.Format( SRResources.TraceReadFromStreamMessage, type.Name, contentType == null ? SRResources.TraceNoneObjectMessage : contentType.ToString()); }, execute: () => { value = innerFormatter.ReadFromStream(type, stream, content, formatterLogger); }, endTrace: (tr) => { tr.Message = Error.Format( SRResources.TraceReadFromStreamValueMessage, FormattingUtilities.ValueToString(value, CultureInfo.CurrentCulture)); }, errorTrace: null); return(value); }
public BufferedMediaTypeFormatterTracer(BufferedMediaTypeFormatter innerFormatter, ITraceWriter traceWriter, HttpRequestMessage request) { _innerTracer = new MediaTypeFormatterTracer(innerFormatter, traceWriter, request); // copy non-overridable members from inner formatter _innerTracer.CopyNonOverriableMembersFromInner(this); BufferSize = innerFormatter.BufferSize; }
public void Decorator_GetInner_On_BufferedMediaTypeFormatterTracer_Returns_BufferedMediaTypeFormatter() { // Arrange BufferedMediaTypeFormatter expectedInner = new Mock <BufferedMediaTypeFormatter>().Object; BufferedMediaTypeFormatterTracer productUnderTest = new BufferedMediaTypeFormatterTracer(expectedInner, new TestTraceWriter(), new HttpRequestMessage()); // Act BufferedMediaTypeFormatter actualInner = Decorator.GetInner(productUnderTest as BufferedMediaTypeFormatter); // Assert Assert.Same(expectedInner, actualInner); }
public static MediaTypeFormatter CreateTracer(MediaTypeFormatter formatter, ITraceWriter traceWriter, HttpRequestMessage request) { // If we have been asked to wrap a tracer around a formatter, it could be // already wrapped, and there is nothing to do. But if we see it is a tracer // that is not associated with a request, we wrap it into a new tracer that // does have a request. The only formatter tracers without requests are the // ones in the default MediaTypeFormatterCollection in the HttpConfiguration. IFormatterTracer formatterTracer = formatter as IFormatterTracer; if (formatterTracer != null) { if (formatterTracer.Request == request) { return(formatter); } formatter = formatterTracer.InnerFormatter; } MediaTypeFormatter tracer = null; XmlMediaTypeFormatter xmlFormatter = formatter as XmlMediaTypeFormatter; JsonMediaTypeFormatter jsonFormatter = formatter as JsonMediaTypeFormatter; FormUrlEncodedMediaTypeFormatter formUrlFormatter = formatter as FormUrlEncodedMediaTypeFormatter; BufferedMediaTypeFormatter bufferedFormatter = formatter as BufferedMediaTypeFormatter; // We special-case Xml, Json and FormUrlEncoded formatters because we expect to be able // to find them with IsAssignableFrom in the MediaTypeFormatterCollection. if (xmlFormatter != null) { tracer = new XmlMediaTypeFormatterTracer(xmlFormatter, traceWriter, request); } else if (jsonFormatter != null) { tracer = new JsonMediaTypeFormatterTracer(jsonFormatter, traceWriter, request); } else if (formUrlFormatter != null) { tracer = new FormUrlEncodedMediaTypeFormatterTracer(formUrlFormatter, traceWriter, request); } else if (bufferedFormatter != null) { tracer = new BufferedMediaTypeFormatterTracer(bufferedFormatter, traceWriter, request); } else { tracer = new MediaTypeFormatterTracer(formatter, traceWriter, request); } return(tracer); }
public void BufferSize_Uses_Inners() { // Arrange HttpRequestMessage request = new HttpRequestMessage(); Mock <BufferedMediaTypeFormatter> mockFormatter = new Mock <BufferedMediaTypeFormatter>() { CallBase = true }; BufferedMediaTypeFormatter innerFormatter = mockFormatter.Object; innerFormatter.BufferSize = innerFormatter.BufferSize + 1; BufferedMediaTypeFormatterTracer tracer = new BufferedMediaTypeFormatterTracer(innerFormatter, new TestTraceWriter(), request); // Act & Assert Assert.Equal(innerFormatter.BufferSize, tracer.BufferSize); }