[英]“Incorrect Content-Type: ” exception throws angular mvc 6 application
[英]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/xml
, text/xml
或application/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.