Angular 6,httpclient 404错误。 GET URL自动更改

时间:2019-01-04 15:22:14

标签: angular

我有一个非常奇怪的错误。花费了数小时试图修复它,但仍然没有任何线索。 我将解释我遇到的问题的非常基本的版本。 我有一个简单的角度页面,在init上调用REST服务,返回的数据将用于填充某些菜单选项。

下面的代码可以正常工作。

ngOnInit() {
    //this.Envi.BaseLink + `api/V2Startup?userid=${this.Envi.Userid}`

    this.http.get('http://dagilitywebv2/api/V2Startup?userid=TES0049').pipe(

    map((data: any) => ({
        Locations: data.Locations,
        MenuItems: (<any[]>data.Menu).map(mnu => ({ GroupName: mnu.GroupName, MenuList: mnu.MenuList, ExpandTree: true }))
        })),

  ).subscribe((data: any) => {
          this.Locations = data.Locations;
          this.MenuItems = data.MenuItems;
  });

 }

但是如果我用

替换硬编码的URL
this.Envi.BaseLink + `api/V2Startup?userid=${this.Envi.Userid}`

我收到404错误。最初,我的印象是 this.Envi.BaseLink 的值不正确,所以我做了console.log,

console.log(this.Envi.BaseLink + `api/V2Startup?userid=${this.Envi.Userid}`);
this.http.get(this.Envi.BaseLink + `api/V2Startup?userid=${this.Envi.Userid}`).pipe

下面是我看到的。 console.log打印正确的URL。但是我的站点的开发域已添加到我的$ http.get 中,即它将地址视为相对于我的根地址enter image description here

  1. http://dangularv6是我的角度页面所在的地方。
  2. http://dagilitywebv2/api/V2Startup?userid=TES0049是我要致电的服务。
  3. 但是当 this.http.get 被调用时。一些如何打电话给 http://dangularv6/dagilitywebV2//api/V2Startup?userid=TES0049,即正在将其视为相对网址。
  4. 如果我再次用http://dagilitywebv2/api/V2Startup?userid=TES0049进行硬编码,则可以正常工作。

当我在本地运行我的角度应用程序(localport:4200)时,相同的代码也可以正常工作,但是当我将其移至开发服务器以在http://dangularv6下运行时,$ http.get将此前缀添加到我的服务URL中。

我不知道为什么会发生..有什么帮助吗?

更新: 环境

export const environment = {
production: false,
baselink: 'http://dagilitywebv2.lkq.lkqx.net/',
};

可注射类

@Injectable({providedIn: 'root'})
export class UserEnvironment {
    constructor() {this.BaseLink = environment.baselink;}
}

在组件中

import { UserEnvironment } from '../app-constants';
constructor(private http: HttpClient, private Envi: UserEnvironment) { }

1 个答案:

答案 0 :(得分:0)

您的Envi Baselink必须断开,因为get试图转到http://dangularv6/dagilitywebv2//

在Envi中,也许您的客户端需要一个BaseUrl,而服务器则需要一个BaseUrl,这样您就可以使用BaseUrl(在某些情况下使用BaseUrl)和在其他情况下使用ServerUrl代替

虽然我可能是错的