[当我尝试在以下代码中传递令牌时,在控制台中收到一条消息,消息为“ 415(不受支持的媒体类型)”,而在网络中,收到一条消息,消息为“不支持请求实体的媒体类型为“文本/纯文本”为此资源”。
fetchFarmerDetails(Venktoken:string) {
console.log("Welcome");
console.log(Venktoken);
this.token = Venktoken;
console.log(this.token);
let url = "http://169.38.82.132:94/GetFarmerInfo";
var data1 = "'InstanceName': 'ORISSA', 'Content-Type': 'application/json'";
//let headers = new HttpHeaders({ 'Authorization': 'bearer '+ this.token,data1 });
let headers = new HttpHeaders().set("Authorization", 'Bearer ' + this.token);
return this.http.post(url,data1, { headers: headers })
};
关于在Angular中处理身份验证标头的最佳方法> 4最好使用Http拦截器,用于将它们添加到每个请求中,然后使用保护您的路线的警卫。
这是我在应用程序中使用的AuthInterceptor的完整示例:
auth.interceptor.ts
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { AuthService } from './auth.service';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
req = req.clone({
setHeaders: {
'Content-Type' : 'application/json; charset=utf-8',
'Accept' : 'application/json',
'Authorization': `Bearer ${AuthService.getToken()}`,
},
});
return next.handle(req);
}
}
您需要在app.module中将拦截器注册为提供者:
app.module.ts
import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
import { AuthInterceptor } from '../auth/auth.interceptor';
...
imports: [
HttpClientModule,
...
],
providers: [
{
provide : HTTP_INTERCEPTORS,
useClass: AuthInterceptor,
multi : true,
},
...
],
...
关于围棋方面,这很可能是您正在发送的请求标头以及CORS允许的标头。您应该尝试的第一件事就是允许所有人:
headersOk := handlers.AllowedHeaders([]string{"*"})
originsOk := handlers.AllowedOrigins([]string{"*"})
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
并且如果问题消失了,请尝试仔细构造您的CORS到客户发送的内容。