簡體   English   中英

Owin / WebApi強制僅接受application / json Accept和Content-Type標頭

[英]Owin/WebApi force to to accept only application/json Accept and Content-Type headers

我需要將Owin自托管服務器配置為僅接受application/json Accept和Content-Type標頭。 對於從客戶端收到的任何其他Accept (例如application/xml ),我想返回Http 415不支持的媒體類型。

我已經嘗試了所有解決方案,但似乎都不起作用。 http://www.strathweb.com/2013/06/supporting-only-json-in-asp-net-web-api-the-right-way/

我試圖清除HttpConfiguration所有格式化程序,並僅添加Json一個:

configuration.Formatters.Clear();
configuration.Formatters.Add(new JsonMediaTypeFormatter());

不起作用,對於任何媒體類型,它仍返回200 Ok

我試圖用我自己的JsonContentNegotiator替換DefaultContentNegotiator ,如上面鏈接中的示例所示,仍然沒有運氣。

我最終得到的解決方案是,我自己要驗證Controller中的標頭。 但這是一個非常丑陋的解決方案。 有什么辦法可以使用webapi做到這一點嗎?

您是否嘗試過使用委托處理程序

public class MediaTypeDelegatingHandler: DelegatingHandler
{
    protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (request.Headers.Accept.Contains(MediaTypeWithQualityHeaderValue.Parse("application/json")) == false)
        {
            return request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
        }
        return await base.SendAsync(request, cancellationToken);
    }
}

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

我沒有嘗試過代碼,但是如果您還沒有解決方案,可以嘗試一下。

暫無
暫無

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

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