如何使用Angular 4前端和DotNet Core后端从同一主机名访问API?

时间:2017-11-02 07:51:31

标签: c# angular api .net-core

我在同一解决方案中使用.NET Core-backend有一个Angular 4前端。

据我所知,无法以相同的方式从Angular访问窗口对象,因此没有好的方法来解码获取当前位置/环境。

使用.NET Core-backend我也没有angular.cli.json文件,因此我可以配置环境/ environment.prod.ts环境/ environment.local.ts类型的设置。 / p>

我想知道为什么我无法在不指定主机名(我无法访问主机名)的情况下访问说我的后端API而没有专门输入它?

在本地主机上http://localhost:port/api/ /例如,当我希望能够使用' / api //&#访问它时,我必须指定http://localhost:port 39;直接

因此,在本地工作时,我有一个环境并部署了另一个环境。所以我无法使用localhost URL完全部署它。

Angular的HTTP客户端在请求中使用相同主机名的正确方法是什么?

我已经设置了像我所说的环境,但在发布版本中,它并没有选择environment.prod.ts文件。我想这与.NET Core解决方案有关,而不是与Angular有关。

有什么建议吗?

通过生产/开发/本地的配置设置或使用Angular 4在.NET Core解决方案中使用环境设置。

1 个答案:

答案 0 :(得分:0)

您必须更改Startup.cs。 AnyWay,如果您使用Visual Studio 2017,则可以使用角度模板

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
                {
                    HotModuleReplacement = true
                });
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseDefaultFiles();
            app.UseStaticFiles();
            app.Use(async (context, next) =>
            {
                if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value) && !context.Request.Path.Value.StartsWith("api"))
                {
                    context.Request.Path = "/Index.cshtml";
                    context.Response.StatusCode = 200;
                    await next();
                }
            });
        }

因此,http调用可以像

this._http.get('/api/controller/action')