【问题标题】:How to enable Cors in ASP.NET Web Api如何在 ASP.NET Web Api 中启用 Cors
【发布时间】:2017-05-03 07:25:57
【问题描述】:

我正在学习 Angular 2。这是我应该从 ASP.NET Web api 应用程序中提取数据的服务。

@Injectable()
export class ExpenseService {
  private _expUrl = "http://localhost:65400/api/expenses";

  constructor(private _http: Http){}    

  getExpenses(): Observable<IExpense[]> {
    return this._http.get(this._expUrl)
        .map((response: Response) => <IExpense[]>response.json())
        .do(data => console.log('ALL: ' + JSON.stringify(data)))
        .catch(this.handleError)
  }    
  //more here...
}

以上代码在 Microsoft Edge 中运行良好。但是,在 Chrome 和 FireFox 中,我收到以下错误:

XMLHttpRequest cannot load http://localhost:65400/api/expenses. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:3000' is therefore not allowed

我已经按照许多帖子的建议在我的 web api 中启用了 CORS。

public void ConfigureServices(IServiceCollection services)
{
   services.AddCors();
   //...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
       ILoggerFactory loggerFactory)
{
  //...
  app.UseCors(builder =>
            builder.WithOrigins("http://localhost:3000/"));
}

这并没有改变结果。在 Edge 工作正常时,我在 Chrome 和 FireFox 中仍然遇到同样的错误。

感谢您的帮助

【问题讨论】:

  • 客户端代码完全无关,CORS必须在服务器端实现,它是浏览器决定它的可用性,而不是javascript。您的问题应该是如何在 .NET 中实现它而不是有角度的。这应该不难研究......这个网站上有数千个 CORS 问题,整个网站都致力于它以及许多其他网络资源
  • 伙计们,别再投票了。我对CORS一无所知。我收到一个错误,这就是我在这里寻求帮助的原因。我应该更改标题吗?
  • 是的,你应该做一些研究。每周都会提出数百个 CORS 问题
  • @charlietfl,试着表现得很好。您可以免费提供帮助。你不认为我已经对这个主题进行了研究。我发布了我在网上找到的代码。
  • 显然不是...根据下面的答案,您正在寻找的内容在手册中是正确的。在这里提问应该是最后的手段,我的观点是这并不难研究

标签: angularjs asp.net-web-api asp.net-core cors


【解决方案1】:

CORS 由客户端强制执行,由服务器支持。

CORS 可以帮助您作为用户。它限制了客户端(例如主机 google.com 上的 javascript)调用 mydomain.com 上的服务的可能性。这是 Chrome 和 FireFox 不允许的跨域调用。 (假设 Edge 也支持这一点)。如果您在某个主机和端口上托管服务和客户端,则不使用 CORS。

服务必须定义允许跨域的主机。这可以来自所有主机,也可以来自特定主机。

要允许所有主机访问,请执行以下操作:

配置

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors();
}

控制器

[EnableCors("AllowSpecificOrigin")]
public class TestController : ApiController

如果您的服务是公共服务,请注意后果。

您可以在这里阅读更多内容:https://docs.microsoft.com/en-us/aspnet/core/security/cors

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-08-05
  • 2019-02-11
  • 2017-06-18
  • 2013-09-08
  • 2014-10-20
  • 2021-09-30
  • 2014-11-22
  • 2019-07-03
相关资源
最近更新 更多