如何检索ASP.NET WebAPI MediaTypeFormatter中的HTTP请求方法?

如何检索ASP.NET WebAPI MediaTypeFormatter中的HTTP请求方法?

问题描述:

我想抛出一个异常,当一个ASP.NET WebAPI函数返回JSON的值是一个IEnumerable和HTTP请求方法是GET - hopefully to stop any JSON being generated where the top level is an array如何检索ASP.NET WebAPI MediaTypeFormatter中的HTTP请求方法?

我试图通过创建一个MediaTypeFormatter来做到这一点。我能做到吗?我还有另外一种方法可以做到这一点吗?谢谢。

喜欢的东西:

public class CustomFormatter : MediaTypeFormatter 
{ 
    public override Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, TransportContext transportContext) 
    { 
     // Retrieve value for isGetRequest somehow... 
     if (value is IEnumerable && isGetRequest) 
     { 
      throw new InvalidOperationException(); 
     } 
     ... 
    } 
} 

GetPerRequestFormatterInstance方法已被添加,可以重写它是可能的:

public class CustomFormatter : MediaTypeFormatter 
{ 
    private HttpRequestMessage _request; 

    private CustomFormatter(HttpRequestMessage request) 
    { 
     _request = request; 
    } 

    public override MediaTypeFormatter GetPerRequestFormatterInstance(Type type, HttpRequestMessage request, MediaTypeHeaderValue mediaType) 
    { 
     return new CustomFormatter(request); 
    } 
    .......... 

所以,如果你这样做,那么在WriteToStreamAsync时,请求将有价值。

+0

这是一个很棒的提示 – 2012-08-08 11:29:56