如何检索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
时,请求将有价值。
这是一个很棒的提示 – 2012-08-08 11:29:56