相关疑难解决方法(0)

IIS劫持了CORS Preflight OPTIONS请求

我正在进行CORS POST请求并将Content-Type标头设置为json.这会触发Preflight OPTIONS请求触发(这很好并且预期)

此OPTIONS请求以200 OK响应,但这不是来自我的WebAPI应用程序.

我有一个自定义的消息处理程序,它永远不会受到影响,因此在看到ASP.NET之前,IIS会响应请求.

我找到了几个关于这个主题的帖子,他们说了以下内容

  1. 确保卸载/删除/禁用WebDav - 完成

  2. 确保删除/更改OPTIONSVerbHandler以使用aspnet_isapi.dll - 同时尝试

  3. 确保extensionlessURLHandler包含OPTIONS动词 - DONE

但是,我的选项请求仍然被劫持.我的意思是,IIS以200 OK响应,但在响应中不包括Access-Control-Allow-Origin标头.它不包括此标头,因为它永远不会到我设置此标头的WebAPI CORS代码.

我能找到的两个最好的帖子听起来像是我的问题

这里:JQuery坚持CORS预检和IIS幽灵响应

在这里:http://brockallen.com/2012/10/18/cors-iis-and-webdav/

我尝试在IIS中打开失败请求跟踪(FERB)并将其设置为跟踪所有200个状态代码.我没有看到选项请求被记录...不确定这是否意味着FERB不跟踪OPTIONS请求或者我是否需要更改FERB设置中的某些内容以使其跟踪OPTIONS请求,或者如果这是一条线索我的问题是什么?

这是在IIS 7.5上运行的ASP.NET WebAPI 2.0(也在IIS 8和IISExpress上测试,结果相同)无论什么浏览器(Chrome,FF和IE都以相同的方式失败)

我已经尝试了我能找到的关于这个主题的所有内容,仍然无法解决我的问题.

帮帮我StackOverflow,你是我唯一的希望.

iis asp.net-mvc cors asp.net-web-api

43
推荐指数
5
解决办法
5万
查看次数

Web API 2.1 Windows身份验证CORS Firefox

这是场景:

我创建了一个web api项目和一个mvc项目,如下所示:

http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

我通过nuget安装了CORS支持并添加了EnableCorsAttribute

我运行了这个项目,一切都按照预期(GET,PUT和POST)在Chrome,IE和FireFox上运行.

然后我在web api项目中启用了Windows身份验证(是的,我真的需要在api项目中使用win auth).为了使这个工作,我将xhrFields arg添加到我的jquery.ajax调用:

        $.ajax({
            type: method,
            url: serviceUrl,
            data: JSON.stringify(foo),
            contentType: 'application/json; charset=UTF-8',
            xhrFields: {
                withCredentials: true
            }
        }).done(function (data) {
            $('#value1').text(data);
        }).error(function (jqXHR, textStatus, errorThrown) {
            $('#value1').text(jqXHR.responseText || textStatus);
        });
Run Code Online (Sandbox Code Playgroud)

另外,我设置了EnableCorsAttribute.SupportsCredentials属性= true

我测试了一切.Chrome和IE工作,FireFox没有.Firefox收到401响应它的预检(OPTIONS)请求.

似乎FireFox没有尝试使用该服务进行身份验证.

有没有人找到解决这个问题的方法?

asp.net firefox windows-authentication cors asp.net-web-api

10
推荐指数
1
解决办法
9265
查看次数

401尝试实施CORS for SharePoint时

我想从位于domainB.contoso.com上的Web应用程序访问位于domainA.contoso.com上的listdata.svc(一个sharepoint服务) - 身份验证似乎是个问题.

当尝试通过JQuery Ajax调用访问ListData.svc时,启用CORS,服务器返回401.如果我从SharePoint内部执行的.htm页面运行相同的查询,则调用正常,因为域名是相同.

SharePoint正在使用NTLM关闭匿名身份验证 - 我认为401是Windows凭据未传递到SharePoint服务器的结果 - 但我不知道如何正确地将这些凭据添加到标头. 我已经设置了xhrFields:{withCredentials:true},但这似乎无法解决身份验证问题.

为了启用CORS,我在IIS中的SharePoint上设置了以下HTTP响应标头:

  • Access-Control-Allow-Credentials:true
  • Access-Control-Allow-Headers:Origin,Content-Type,Accept
  • Access-Control-Allow-Origin:*
  • 访问控制请求方法:POST,GET,HEAD,OPTIONS

在我的Web应用程序的IIS中启用了Windows身份验证,我没有在IIS中设置"OPTIONSVerbHandler"HTTP处理程序.把它翻到阅读似乎没有什么区别.

JQuery Ajax调用(来自subdomainB.contoso.com上的应用程序):

 $.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",
        url: listUrl,
        xhrFields: { withCredentials: true },
        crossDomain:true,  
        processData: false,
        async: true,
        dataType: "json",
        converters: {
            // WCF Data Service .NET 3.5 incorrectly escapes singles quotes, which is clearly
            // not required (and incorrect) in JSON specs.
            // http://bugs.jquery.com/ticket/8320?cversion=0&cnum_hist=1
            "text json": function (textValue) {
                return jQuery.parseJSON(textValue.replace(/(^|[^\\])\\'/g, "$1'"));
            }
        },
        success: function (data, status, xhr) { …
Run Code Online (Sandbox Code Playgroud)

javascript authentication ajax sharepoint cors

7
推荐指数
1
解决办法
1万
查看次数

Angular 4 HTTP POST 与 Windows 身份验证预检问题

我在后端使用 Angular 4 和 ASP.NET Web api 2,并启用了 Windows 身份验证。我有一篇文章和一篇 get api。GET 工作正常。但对于 POST 我收到此错误

预检响应具有无效的 HTTP 状态代码 401

这意味着我收到 OPTIONS 方法的未经授权的错误,但我知道不应该出现这种情况,因为永远不会使用用户凭据调用 OPTIONS 方法。

在角度中我调用 api 如下

      let requestOptions = new RequestOptions({
      withCredentials: true,
      headers: new Headers({
        'content-type': 'application/json'
      })
    })
    this.http.post("someapiendpoint", JSON.stringify(data), requestOptions).subscribe(data => {
      debugger;
    });
Run Code Online (Sandbox Code Playgroud)

我已在 Web 配置中设置所有 CORS 标头,如下所示

        <add name="Access-Control-Expose-Headers " value="WWW-Authenticate"/>
        <add name="Access-Control-Allow-Origin" value="http://localhost:4200" />
        <add name="Access-Control-Allow-Headers" value="accept, authorization, Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
        <add name="Access-Control-Allow-Credentials" value="true" />
Run Code Online (Sandbox Code Playgroud)

我的 …

http windows-authentication cors preflight angular

5
推荐指数
1
解决办法
6684
查看次数