簡體   English   中英

未指定Content-Type時引發異常

[英]Throw exception when Content-Type is not specified

我有一個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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM