2013-03-04 69 views
0

我有一个非常愚蠢的问题与自定义格式化程序相关。Web API ReadFromStreamAsync未执行

public class RequestHeaderJsonFormatter : MediaTypeFormatter 
{ 
    public RequestHeaderJsonFormatter() 
    { 
     SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/xml")); 
     SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/xml")); 
     SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
     SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain")); 
    } 

    public override System.Threading.Tasks.Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger) 
    { 
     return base.ReadFromStreamAsync(type, readStream, content, formatterLogger); 
    } 

    public override bool CanReadType(Type type) 
    { 
     return true; 
    } 

    public override bool CanWriteType(Type type) 
    { 
     return true; 
    } 
} 

我寄存器格式化Global.asax中,因为它遵循:

保护无效的Application_Start() { GlobalConfiguration.Configuration.Formatters.Insert(0,新RequestHeaderJsonFormatter());

AreaRegistration.RegisterAllAreas(); 
WebApiConfig.Register(GlobalConfiguration.Configuration); 
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 

}

我的问题是执行控制器动作时ReadFromStreamAsync不会被调用。

public class HomeController : ApiController 
{ 
    public HttpResponseMessage GetString(string param) 
    { 
     var response = Request.CreateResponse(HttpStatusCode.OK, "ererrer"); 
     return response; 
    } 
} 

我在做什么错......我无法弄清楚。任何帮助将非常感激。

回答

0

默认情况下'字符串'类型的动作参数需要从Uri读取,除非使用[FromBody]属性来装饰它,在这种情况下格式化程序会进入画面。

公共HttpResponseMessage的GetString(* [FromBody] *串PARAM)

+0

嘿,我为我的迟到回复道歉。它根本不起作用。我用自定义对象替换了字符串参数,并且具有相同的行为。 – 2013-03-05 08:54:39

+0

你能分享你的原始请求(可能来自Fiddler)的样子吗? – 2013-03-05 08:57:42