【发布时间】:2023-03-27 08:55:01
【问题描述】:
我想在 https://jsonplaceholder.typicode.com/users 上提出请求,但我收到一个无效的 URL 错误,但该 URL 对我来说没问题。我真的不明白为什么。
错误消息:消息:无法在“XMLHttpRequest”上执行“打开”:无效的 URL
export class User {
id: string;
name: string;
email: string;
username: number;
}
import { User } from '../models/user';
@Injectable({
providedIn: 'root'
})
export class UserService {
// REST API
endpoint = 'https://jsonplaceholder.typicode.com/';
constructor(private httpClient: HttpClient) { }
getUsers(): Observable<User> {
return this.httpClient.get<User>(this.endpoint + 'users')
.pipe(
retry(1),
catchError(this.processError)
)
}
processError(err) {
let message = '';
if(err.error instanceof ErrorEvent) {
message = err.error.message;
} else {
message = `Error Code: ${err.status}\nMessage: ${err.message}`;
}
console.log(message);
return throwError(message);
}
}
在组件中:
export class UserListComponent implements OnInit {
Users: any = [];
constructor(private crudService: UserService) {}
ngOnInit() {
this.fetchUsers();
}
fetchUsers() {
return this.crudService.getUsers().subscribe((res: {}) => {
this.Users = res;
})
}
}
在html中
<table class="table">
<thead>
<tr class="table-primary">
<th>#User Id</th>
<th>Name</th>
<th>Us
er Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let data of Users">
<th scope="row">{{data.id}}</th>
<td>{{data.name}}</td>
<td>{{data.username}}</td>
<td>{{data.email}}</td>
</tr>
</tbody>
</table>
【问题讨论】:
-
您没有将返回类型指定为用户数组,并且还指定“res”必须是单个对象。这可能是您的错误的根源。
-
@cklimowski 错误的返回类型如何导致 Invalid Url 错误?
-
@cklimowski 很奇怪,这是我在几个网站上找到的确切代码 positronx.io/make-http-requests-with-angular-httpclient-api
-
只是一个建议,我在你的代码中认为是不正确的。如果您进行了这些更改但仍然遇到问题,请使用您问题中的更改更新您的代码。
-
我的猜测是,您的网址中有一些无效字符。有些 Unicode 字符看起来与“普通”字符完全一样,但在 url 中是无效的。这可能是通过 c&p 来自其他地方的 url 来实现的。尝试完全删除 url(以及稍后添加的用户部分)并从头开始重新输入。不要 c&p,但要真正输入!
标签: angular asp.net-web-api mvvm httprequest