我无法收到OPTIONS
调用,该调用POST
在具有Web Api 2后端的Angular 5应用程序上运行。我已经阅读了很多关于此的文章,似乎我已经完成了他们所谈论的所有设置。
拨打POST
时,我收到401错误和以下消息:
对预检请求的响应未通过访问控制检查:所请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://www.contoso.com”。响应的HTTP状态代码为401。
我正在运行一个由IIS服务器上托管的Angular 5构建的前端站点。我有一个HttpClient
的拦截器,该拦截器在我们使用Windows身份验证时仅通过凭据:
export class Authenticator implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
withCredentials: true
});
return next.handle(request);
}
}
如果我查看经过的GET
呼叫,就会看到它在响应中列出了访问控制标头。
在服务器端,我安装了Microsoft.AspNet.WebApi.Cors软件包,然后将其添加到我的WebApiConfig.cs文件中:
var cors = new EnableCorsAttribute("http://www.contoso.com", "*", "*");
cors.SupportsCredentials = true;
config.EnableCors(cors);
,由于使用IIS,因此将其放在Web.config文件中:
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
很明显,我把www.contoso.com放在上面的地方到处都是我的网站:)
这是Chrome在失败的呼叫中显示的请求标头的内容:
OPTIONS / lampservice / ehs / new HTTP / 1.1
主持人:lamp-dev.contoso.com
连接:保持活动状态
访问控制请求方法:POST
来源:http://lamp.contoso.com
用户代理:Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,例如Gecko)Chrome / 67.0.3396.99 Safari / 537.36
访问控制请求标头:内容类型
接受: /
接受编码:gzip,deflate
接受语言:en-US,en; q = 0.9
这是工作的GET
标头的样子:
获取/ lampservice / workers / details HTTP / 1.1
主持人:lamp-dev.contoso.com
连接:保持活动状态
接受:application / json,text / plain, /
来源:http://lamp.contoso.com
用户代理:Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,例如Gecko)Chrome / 67.0.3396.99 Safari / 537.36
推荐人:http://lamp.contoso.com/ehs-assessment
接受编码:gzip,deflate
接受语言:en-US,en; q = 0.9
Cookie:...。
失败的响应如下:
HTTP / 1.1 401未经授权
内容类型:text / html
伺服器:Microsoft-IIS / 8.5
WWW认证:协商
WWW认证:NTLM
X-Powered-By:ASP.NET
日期:2018年8月6日星期一20:53:26 GMT
内容长度:1293
良好的响应如下:
HTTP / 1.1 200确定
缓存控制:无缓存
语法:无缓存
内容长度:228
内容类型:application / json; charset = utf-8
过期:-1
伺服器:Microsoft-IIS / 8.5
访问控制允许来源:http://lamp.contoso.com
访问控制允许凭据:true
X-AspNet版本:4.0.30319
持久性验证:true
X-Powered-By:ASP.NET