2017-05-11 37 views
1

我在同一个解决方案中有一个ASP.Net核心和一个Web Api项目。我从我的Api项目中定义的核心项目中调用Get,Post,Put,Delete。当然,我需要启用CORS。预检响应中的Access-Control-Allow-Headers不允许请求标头字段x-ms-request-root-id

贝娄是我在网络API的web.config文件中添加的代码,

<httpProtocol> 
    <customHeaders> 
    <!-- Enable Cross Domain AJAX calls --> 
    <clear /> 
      <add name="Access-Control-Allow-Origin" value="*" /> 
      <add name="Access-Control-Allow-Headers" value="Content-Type"/> 
    </customHeaders> 
</httpProtocol> 

而且从核心项目我的Ajax代码,

$.ajax({ 
     "url": "myApiUrl", 
     "type": "Get", 
     "data": { 
      //Here I'm passing a value 
     }, 
     success: function (d) { 
     } 

我设置两个项目作为启动项目。没什么大不了。它调用Api方法并返回数据。但有时它不会返回任何东西,即使该方法返回数据,我也会在我的问题标题中提到的browser console中发生错误。我在SO中查了很多答案,包括this one,都说我需要在我的response header中加access control。任何人都可以告诉我需要添加的内容以及我需要添加的内容,以便它能按预期工作。

我也检查了Asp.net MVC项目,而不是核心,同样的事情发生。

注意:我在我的Web Api项目中添加了CORS而不是在我的Web项目中。

+0

是否在Web API操作中启用授权,即授权属性? –

+0

编号现在,我提供了所有我没有验证的Api方法 –

+0

好的。你能说明你是如何启用CORS的吗? –

回答

0

试试这个:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddCors(o => o.AddPolicy("CrossPolicy", builder => 
    { 
     builder.AllowAnyOrigin() 
       .AllowAnyMethod() 
       .AllowAnyHeader(); 
    })); 

    // ... 
} 

为每一个请求:

public void Configure(IApplicationBuilder app) 
{ 
    app.UseCors("CrossPolicy"); 

    // ... 
} 

OR

[EnableCors("CrossPolicy")] 

可以在thisthis链接找到更多信息。

希望它对您有所帮助。

+0

我的应用程序中没有ApplicationOAuthProvider类或MatchEndpoint。我需要添加那些还是什么?如果我需要添加,然后我需要添加? –

+0

我更新了我的答案。并且对我以前的回答感到抱歉。这是ASP.NET web api 2 @ BasantaMatia – Ashiquzzaman

1

我想你没有在Web API中正确启用CORS。您可以通过以下过程执行此操作:

1)您可以将[EnableCors]属性放在Web API的控制器中,或全局放入WebAPI配置中。

示例 - [EnableCors("*", "*", "*")]。 把它放在控制器上(你想允许CORS)。 注意:您可以修改属性,这个过滤器允许某些方法,网址等

2)WebAPi.config呼叫enableCors即

public static void Register(HttpConfiguration config) 
    { 
    // Other configuration omitted 
    config.EnableCors(); 
    } 

编辑:如果您需要在全球范围内启用CORS,删除EnableCors属性从控制器并修改WebApiConfig.cs文件中的EnableCors()行为:

config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 
+0

虽然我想要全局,但这就是为什么我在web.config文件中添加的原因。没有任何问题。但是,我需要写注册方法吗? –

+0

你不需要写寄存器方法。它已经存在于web api项目的WebApiConfig.cs文件中。它的默认创建。你只需要在里面添加行。 –

+0

目前我正在研究ASP.Net Core。没有名为WebApiConfig.cs的文件。我在Configure方法下的startup.cs文件中添加。说,不包含EnableCors的定义。 –

相关问题