1

当 ASP.NET WebAPI 函数返回值为 IEnumerable 且 HTTP 请求方法为 GET 的 JSON 时,我想抛出一个异常 -希望停止生成任何顶级为数组的 JSON

我试图通过创建 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();
        }
        ...
    }
}
4

1 回答 1

8

这是可能的,因为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-08T08:54:02.917 回答