![](/img/trans.png)
[英]set both the HTTP Accept and Content-Type headers to “application/xml” in C#
[英]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.