我有同样的问题。您必须配置您的服务器以公开 X-InlineCount 标头。如果您使用的是项目 ASP .NET Web API,则必须在 web.config 中添加下一行:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
<add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS" />
<add name="Access-Control-Expose-Headers" value="X-InlineCount" />
</customHeaders>
</httpProtocol>
另外,我遇到了firefox的问题,但是在firefox的最新版本中,问题得到了解决。
(你不需要使用所有的行,这只是一个例子);)
- - -编辑 - - -
我忘记了,因为那是很久以前的事了。当您进行 CORS 调用时,浏览器首先发送一个 Option 调用以检查是否可以进行 CORS 调用以及允许执行哪些操作。所以你必须在你的 WEB API 项目中实现一个消息处理程序来管理这个 OPTION 调用。接下来是实现:
public class OptionsHttpMessageHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.Method == HttpMethod.Options)
{
var apiExplorer = GlobalConfiguration.Configuration.Services.GetApiExplorer();
var controllerRequested = request.GetRouteData().Values["controller"] as string;
var supportedMethods = apiExplorer.ApiDescriptions
.Where(d =>
{
var controller = d.ActionDescriptor.ControllerDescriptor.ControllerName;
return string.Equals(
controller, controllerRequested, StringComparison.OrdinalIgnoreCase);
})
.Select(d => d.HttpMethod.Method)
.Distinct();
if (!supportedMethods.Any())
return Task.Factory.StartNew(
() => request.CreateResponse(HttpStatusCode.NotFound));
return Task.Factory.StartNew(() =>
{
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Headers.Add("Access-Control-Allow-Origin", "*");
resp.Headers.Add("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Accept, Security,Token-Access");
resp.Headers.Add("Access-Control-Allow-Methods", "GET,POST,OPTIONS");
resp.Headers.Add("Access-Control-Expose-Headers", "X-InlineCount");
return resp;
});
}
return base.SendAsync(request, cancellationToken);
}
}
如果你把它放在你的 web.config 中,你可以省略下一节。
resp.Headers.Add("Access-Control-Allow-Origin", "*");
resp.Headers.Add("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Accept, Security,Token-Access");
resp.Headers.Add("Access-Control-Allow-Methods", "GET,POST,OPTIONS");
resp.Headers.Add("Access-Control-Expose-Headers", "X-InlineCount");
我希望这有助于解决您的问题。
PD:对不起,我的英语不是我的母语。