0

我有一个与自定义格式化程序相关的非常愚蠢的问题。

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 中注册了格式化程序,如下所示:

protected void Application_Start() { GlobalConfiguration.Configuration.Formatters.Insert(0, new 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;
    }
}

我做错了什么......我想不通。任何帮助将非常感激。

4

1 回答 1

0

默认情况下,'string' 类型的动作参数应该从 Uri 中读取,除非使用 [FromBody] 属性来装饰它,在这种情况下格式化程序就会出现。

公共 HttpResponseMessage GetString(* [FromBody] *string param)

于 2013-03-04T16:57:28.133 回答