类型未指定

我有一个返回一些产品数据的Web API项目。

如果没有指定Accept头,它将默认返回XML,在我的WebApiConfig这样做:

config.Formatters.Clear();
config.Formatters.Add(new XmlMediaTypeFormatter());
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.Add(new FormUrlEncodedMediaTypeFormatter());

所以默认是XML,第一个格式化器,但是如果请求请求它,API仍然支持JSON。

在我的ControllerHelper ,我添加了415格式不支持的响应:

catch (FormatException) 
{
    var resp = new HttpResponseMessage(HttpStatusCode.UnsupportedMediaType) 
    {
        Content = new StringContent(string.Format(HttpStatusCode.UnsupportedMediaType.ToString())),
    };
    throw new HttpResponseException(resp);
}

如果没有指定Accept头,并且因此要求将其设置为application/xmltext/xmlapplication/json ,我想抛出该响应。

例如,如果我测试将Advanced Rest Client中的accept设置为application/foo我想抛出一个异常。


在这里输入图像描述


这个怎么做? 提前致谢!


public class NotAcceptableConnegHandler : DelegatingHandler
{
    private const string allMediaTypesRange = "*/*";

    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var acceptHeader = request.Headers.Accept;
        if (!acceptHeader.Any(x => x.MediaType == allMediaTypesRange))
        {
            var hasFormetterForRequestedMediaType = GlobalConfiguration
                .Configuration
                .Formatters
                .Any(formatter => acceptHeader.Any(mediaType => formatter.SupportedMediaTypes.Contains(mediaType)));

            if (!hasFormetterForRequestedMediaType)
                return Task<HttpResponseMessage>.Factory.StartNew(() => new HttpResponseMessage(HttpStatusCode.NotAcceptable));
        }
        return base.SendAsync(request, cancellationToken);
    }
}

在你的WebApiConfig文件中:

public static void Register(HttpConfiguration config)
{
    config.MessageHandlers.Add(new NotAcceptableConnegHandler());
}

代码来自:http://pedroreys.com/2012/02/17/extending-asp-net-web-api-content-negotiation/

链接地址: http://www.djcxy.com/p/20403.html

上一篇: Type is not specified

下一篇: Give OData service document base URL a trailing slash in WebApi OData