【问题标题】:Angular 6, httpclient 404 error. GET URL getting automatically changedAngular 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 中添加了我网站的 dev 域,即 它将地址视为相对于我的根目录

  1. http://dangularv6 是我的 Angular 页面所在的位置。
  2. http://dagilitywebv2/api/V2Startup?userid=TES0049 是我正在尝试调用的服务。
  3. 但是当 this.http.get 被调用时。一些它是如何拨打电话的 http://dangularv6/dagilitywebV2//api/V2Startup?userid=TES0049,即将其视为相对 URL。
  4. 如果我再次使用 http://dagilitywebv2/api/V2Startup?userid=TES0049 进行硬编码,它可以正常工作。

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

我不知道为什么会这样……有什么帮助吗?

更新: 环境.ts

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) { }

【问题讨论】:

  • 当你console.log(this.Envi.BaseLink)时它会打印什么?
  • 你得到 // 在 api 之前,尝试 http.get( `${this.Envi.BaseLink}api/V2Startup?userid=${this.Envi.Userid}.pipe(... )
  • dagilitywebv2/api/V2Startup?userid=TES0049 应该是这样,(在我的屏幕截图中以黄色突出显示)
  • 它可能是base-href吗? Angular 应用是部署在根文件夹还是子文件夹中?
  • 你的 environment.ts 呢? Envi.baseLink 定义在哪里?以及对 base-href 的另一票

标签: angular


【解决方案1】:

您的 Envi Baselink 必须被破坏,因为 get 正试图转到 http://dangularv6/dagilitywebv2//

也许您的客户端需要一个 BaseUrl,Envi 中的服务器需要另一个 BaseUrl,因此您可以使用而不是仅使用 BaseUrl,在某些情况下使用 BaseUrl,在其他情况下使用 ServerUrl

我可能错了

【讨论】:

  • 但是如果我将 Envi Baselink 打印到控制台,我会收到 dagilitywebv2/api/V2Startup?userid=TES0049
  • 我知道,但错误 get 尝试从另一个目录获取。因此,可能是服务上的某些东西已经在每次调用时向您的调用添加了 BaseUrl(拦截器?),或者将 dangularv6 部分添加到您的 url 中的其他东西。尝试全局搜索(通常是 ctrl + f)“dangularv6”到看看您是否可以找到将这个特定字符串添加到您的 get http 请求的地方
  • 我只用这个页面创建了这个应用程序(调试这个问题)。我没有创建任何拦截器(除非默认情况下有一个,我无法弄清楚)。我还在 dangularv6 上进行了搜索,但它不存在(它不太可能存在,因为我再次创建它只是为了测试目的)
猜你喜欢
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
相关资源
最近更新 更多