如何在IIS上部署Angular和.NET Core Web API?

时间:2019-05-31 12:02:27

标签: asp.net angular iis asp.net-web-api asp.net-core-webapi

到目前为止,我们在IIS上有两个针对angular_client和web_api的网站,已安装了托管捆绑包,并且已经授予IUSR,Network,Network Service和Everyone等用户许可。

对每个站点的导航分别起作用,即在API中,调用http://localhost:51975/api/user会产生所有用户的列表。

问题在于Angular登录页面无法与API通信以验证用户身份

  

OPTIONS http://localhost:51975/api/user/authenticate net :: ERR_CONNECTION_REFUSED

我试图将与API关联的IP修改为静态IP,即10.1.x.y,然后告诉angular调用http://10.1.x.y:51975/api/user/authenticate

在API中,我启用了将日志发送到浏览器以及日志文件夹的功能,它显示的唯一日志是:

  

托管环境:生产   内容根路径:C:\ inetpub \ wwwroot \ api   现在收听:http://127.0.0.1:39834   应用程序已启动。按Ctrl + C关闭。   应用程序正在关闭...

为什么它在其他端口而不是相关的51975上进行监听?

为什么从Angular到API的连接被拒绝?

为什么应用程序正在关闭?

这是正确的方法吗?

更新

仅在服务器 上,应用程序可以正常运行,并具有以下配置:

  1. 角度位于10.x.y.z:4200,

  2. API 10.x.y.z:51975,

  3. CORS已正确修复。

问题是,当我尝试使用公共ip或主机名时,我仍然只能访问angular而不是Web API,我尝试为api分配主机名,但仍无法正常工作!

谢谢

3 个答案:

答案 0 :(得分:3)

CORS错误说明了您需要了解的所有内容。如果还使用DNS名称访问,则还需要为公用IP和DNS配置CORS。必须将其配置为与访问Angular应用程序使用的网址完全相同。

app.UseCors(options => 
   options.WithOrigins(
      "http://localhost:4200/",
      "http://{public IP}:{public port}/",
      "http://{public DNS name}:{public port}/"
   ).AllowAnyMethod().AllowAnyHeader());

您仅需要Angular客户端地址的CORS设置,因为Angular应用程序需要获得许可才能向您的Web API发出CORS请求。它从公用地址进行调用,因此localhost配置无济于事,仅当您使用本地主机在本地访问它时,此功能才有用。

这里是指向Angular documentation about CORSMicrosoft documentation how to enable CORS的链接,在此进行了详细说明。

答案 1 :(得分:1)

确保在Angular项目的api请求中创建了正确的标头。

喜欢:

kubectl --context=newemployee-context get pods --all-namespaces
NAMESPACE       NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx   nginx-ingress-controller-797b884cbc-pckj6   1/1     Running   0          85d
ingress-nginx   prometheus-server-8658d8cdbb-92629          1/1     Running   0          36d
kube-system     coredns-86c58d9df4-gwk28                    1/1     Running   0          92d
kube-system     coredns-86c58d9df4-jxl84                    1/1     Running   0          92d
kube-system     etcd-kube-master-1                          1/1     Running   0          92d
kube-system     kube-apiserver-kube-master-1                1/1     Running   0          92d
kube-system     kube-controller-manager-kube-master-1       1/1     Running   4          92d
kube-system     kube-flannel-ds-amd64-k6sgd                 1/1     Running   0          92d
kube-system     kube-flannel-ds-amd64-mtrnc                 1/1     Running   0          92d
kube-system     kube-flannel-ds-amd64-zdzjl                 1/1     Running   1          92d
kube-system     kube-proxy-4pm27                            1/1     Running   1          92d
kube-system     kube-proxy-ghc7w                            1/1     Running   0          92d
kube-system     kube-proxy-wsq4h                            1/1     Running   0          92d
kube-system     kube-scheduler-kube-master-1                1/1     Running   4          92d
kube-system     tiller-deploy-5b7c66d59c-6wx89              1/1     Running   0          36d

.net核心方面:

createHeader() {
let reqheaders = new HttpHeaders();
reqheaders.append('Access-Control-Allow-Methods', 'GET, POST, DELETE, PUT');
reqheaders.append('Access-Control-Allow-Origin', '*');

let reqHeader = { headers: reqheaders };
return reqHeader;
}

答案 2 :(得分:0)

k-grid-edit-row