如何在启用基本身份验证的情况下启用对Web API中所有来源的访问?

时间:2019-05-02 13:01:24

标签: c# asp.net ajax api

我想允许在Web API中启用基本身份验证的情况下访问所有源,但是每当我尝试通过ajax调用API时,都会显示错误消息
所请求的资源上没有“ Access-Control-Allow-Origin”标头。 (CORS问题)

我尝试了以下提到的代码段(在webapiconfig中)。 在localhost上运行正常,但是在IIS中托管后,再次出现相同错误。

var corsAttr = new EnableCorsAttribute("*", "*", "*") { SupportsCredentials = true };
config.EnableCors(corsAttr);

我已经从下面的链接实现了基本身份验证:

https://www.c-sharpcorner.com/blogs/basic-authentication-in-webapi

还尝试评论上述代码段,并 在Web.config中添加以下行,但这也失败

<httpProtocol>
  <customHeaders>
   <add name="Access-Control-Allow-Origin" value="*"/>
    <add name="Access-Control-Allow-Headers" value="Authorization, Content-Type"/>
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE"/>
    <add name="Access-Control-Allow-Credentials" value="true" />
  </customHeaders>
</httpProtocol>

AJAX调用:

function post()    
 {

             var data = {xyz};
             $.ajax({
                 url : 'http://localhost:8080/api/demo',
                 type: 'POST',
                 dataType: 'json',
                 data: data,
                 headers: { 'Authorization': 'Basic ' + btoa('abc' + ":" + 'xyz') },
                 success: function (response) {    
                     alert('Success');
                 },
                 error: function (response) { alert('Error'); } 
             });
         }

我希望无论来源如何,都应使用凭据访问我的API。

2 个答案:

答案 0 :(得分:0)

使用以下命令在Chrome中禁用相同的来源策略。

1。关闭Chrome。

2。打开运行。

3。输入chrome.exe --user-data-dir =“ C:/ Chrome开发者会话” --disable-web-security

并尝试调用API。

答案 1 :(得分:0)

有时其他错误会导致CORS错误。就我而言,我在遇到CORS错误的情况下,已经尝试了所有方法。

当我尝试使用wireshark工具监视服务器上的传入请求时,我意识到我的请求根本不会到达服务器。

实际上,尽管CORS错误使我认为错误是由于应用程序上的配置引起的,但这是防火墙问题,无法访问整个服务。在防火墙CORS上进行正确的配置后,错误也消失了