Angular 5无法通过OPTIONS调用

时间:2018-08-06 20:00:48

标签: angular cors asp.net-web-api2

我无法收到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

0 个答案:

没有答案