我目前正在使用angular来向运行ASP.NET的API服务器发出API调用。但是,对于角度开发,我有一个跨源问题,我使用的是localhost。在生产版本中,它们将使用IIS在相同的域下运行。
有没有办法在ASP.NET的同一端口上运行角度应用程序?
P.S。:我也对解决这个问题的其他选择持开放态度。
答案 0 :(得分:4)
我遇到了同样的问题,然后发现了this post on medium,希望对您有用。
编辑: 实际上,我使用的解决方案来自该文章。
想法是您不能在同一端口上“发布” API和Angular应用程序,但是可以使用代理将Angular应用程序连接到另一个端口上的API。
更新:很久很久没回答,很抱歉。
要解决cors问题(在这种情况下),您可以将代理与ng serve
命令一起使用。
例如,在我的情况下,我使用了一个proxy.conf.json
文件,如下所示:
{
"/api/*": {
"target": "http://localhost:3000",
"secure": false,
"pathRewrite": {"^/api" : ""}
}
}
此代码将每个对/api/*
的请求的网址重写为api正在监听的http://localhost:3000
。
因此,为了说明这一点,如果您提出了一个类似http://localhost:4200/api/users
的请求,它将被重定向/重写为http://localhost:3000/api/users
来解决cors问题。
现在,您运行角度应用程序的方式有所不同。
ng serve --proxy-config proxy.conf.json
答案 1 :(得分:3)
我能够通过IIS成功实现!我知道该帖子很旧,但希望可以为寻求解决方案的人节省时间:)
首先(提醒一下),请确保您在IIS计算机上安装了.NET Core主机捆绑包(可以在here上找到链接)。请记住,它将至少需要运行WinSrvr2012R2。 现在,将发布的.net核心API解决方案文件夹复制到服务器。对Angular来说也一样-此处再次提醒:执行 ng build --prod ,然后将 dist 文件夹复制到服务器。 然后配置IIS-创建一个指向Angular应用程序文件夹的新网站。此时,您的Angular应用应该可以运行了(但显然还没有API)。
转到应用程序池-您将看到为您的应用程序创建的池。打开基本设置,然后将CLR版本更改为“无托管代码”。
最后,单击您的网站并在其下单击“添加应用程序”。指向dotnet核心API文件夹,并使用一些简短的别名将其命名。现在,您应该拥有一个包含应用程序的网站结构。
如果您的角度应用网址为:
https://myiissrvr/
您的API位于:
https://myiissrvr/[ALIAS]/
完成
最后评论:
通常,Web API使用
之类的URL结构https://myiissrvr/api/[controller]/[action]
因此,将它们捆绑在一起后,它将看起来像:
https://myiissrvr/[ALIAS]/api/[controller]/[action]
使用这种方法,您应该能够在静态服务的Angular网站下附加多个Web API服务-每个服务都使用自己的别名。在许多情况下,它可能很有用。