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, 新しい 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

デフォルトでは、[FromBody]属性を使用して装飾する場合を除いて、「文字列」タイプのアクションパラメーターがURIから読み取られることが期待されます。

public HttpResponseMessage GetString(* [FromBody] * string param)

于 2013-03-04T16:57:28.133 に答える