有一上,你可以重寫以創建格式化的新實例大約在它請求的狀態信息的格式稱爲GetPerRequestFormatterInstance方法。順便說一句,此方法GetPerRequestFormatterInstance只在請求的反序列化階段被調用。下面的示例:
public class TextPlainFormatter : BufferedMediaTypeFormatter
{
public TextPlainFormatter()
{
this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
}
public HttpRequestMessage CurrentRequest
{
get;
private set;
}
public override MediaTypeFormatter GetPerRequestFormatterInstance(Type type, HttpRequestMessage request, MediaTypeHeaderValue mediaType)
{
TextPlainFormatter frmtr = new TextPlainFormatter();
frmtr.CurrentRequest = request;
//Copy from the original formatter instance to the new instance
frmtr.MediaTypeMappings.Clear();
foreach (MediaTypeMapping mediaTypeMapping in this.MediaTypeMappings)
{
frmtr.MediaTypeMappings.Add(mediaTypeMapping);
}
frmtr.RequiredMemberSelector = this.RequiredMemberSelector;
frmtr.SupportedEncodings.Clear();
foreach (Encoding supportedEncoding in this.SupportedEncodings)
{
frmtr.SupportedEncodings.Add(supportedEncoding);
}
frmtr.SupportedMediaTypes.Clear();
foreach (MediaTypeHeaderValue supportedMediaType in this.SupportedMediaTypes)
{
frmtr.SupportedMediaTypes.Add(supportedMediaType);
}
return frmtr;
}
感謝您的答覆。如果您的格式化程序正在用於傳出響應,此技術可行,但不幸的是,如果您的格式化程序正在用於傳入請求,則此方法無效。 – 2013-02-23 14:19:15
事實上的Web API的運行時呼籲,因爲我在上面的文章中提到的傳入請求(反序列化)GetPerRequestFormatterInstance方法。 – 2013-02-23 19:04:23
這對我有用,謝謝。 – quakkels 2013-06-17 18:33:37