编程语言
首页 > 编程语言> > c#-Visual Studio中带有ASP.NET Web API项目的Angular项目

c#-Visual Studio中带有ASP.NET Web API项目的Angular项目

作者:互联网

我在Visual Studio 2017中有两个项目的解决方案.

其中一个包含客户端SPA的所有Angular文件.另一个是ASP.NET Web API项目,该项目用作Angular前端进行的HTTP调用的端点.

我正在使用Angular CLI和ng-serve将我的角度应用程序部署到localhost:4200

Web API已部署到localhost:6463

在生产环境中,它们将属于同一域.但是,在开发中,它们不在同一域中,因为本地主机的端口不同.由于Angular应用程序不得不与Web api通信,因此迫使我实现CORS.

对我来说,仅出于开发目的而实施CORS似乎不太理想.

有没有更好的结构?还是我缺少什么?

解决方法:

简单答案

否.有关更新的答案,请参见下面的代理部分.

您将需要启用CORS.根据Official Microsoft Documentation for ASP.NET Core,在关于跨域请求(CORS)的部分下,它们提供了“相同来源”的定义:

什么是“原产地”?

如果两个URL具有相同的方案,主机和端口,则它们具有相同的来源. (RFC 6454)
这两个URL具有相同的来源:

> http://example.com/foo.html
> http://example.com/bar.html

这些URL与前两个URL的来源不同:

> http://example.net-其他域
> http://www.example.com/foo.html-不同的子域
> https://example.com/foo.html-不同的方案
> http://example.com:9000/foo.html-不同的端口

Note:
Internet Explorer does not consider the port when comparing origins.

如何启用CORS

为您的案例启用CORS的快速方法:

启动文件

app.UseCors(builder => builder.WithOrigins("localhost"));

Update:
According to 07001, it might be possible to do it without CORS.

API的代理

您需要在Frontend目录中创建一个名为proxy.conf.json的文件:

{
  "/api": {
    "target": "http://localhost:65498",
    "secure": false
  }
}

目标值包含端口号.如果您使用的是Visual Studio,则可以从后端项目属性中读取它.

enter image description here

这会将所有API请求传递给正在运行的ASP.NET Core应用程序.

我们在这里要做的最后一件事是修改npm start脚本,因此它使用代理配置.在Frontend项目中打开package.json,找到scripts部分,然后将start命令修改为:

"start": "ng serve --proxy-config proxy.conf.json"

要使用该应用程序,您需要同时启动ng dev服务器和ASP.NET应用程序.第一个是从前端目录执行的命令npm start来启动的.后端应用程序可以从Visual Studio启动,也可以在运行dotnet watch的命令行中启动.如果使用命令行版本,请注意其使用的端口,并在代理配置文件中正确设置它. dotnet中的watch命令监视应用程序中的更改,并在您进行任何更改时重新构建它.

标签:angular,asp-net-web-api2,cors,asp-net,c
来源: https://codeday.me/bug/20191111/2019104.html