CORS发行Angular4和C#Web API

时间:2018-07-26 11:22:16

标签: c# http cors http-headers

我有一个运行在http://localhost:59543/上的Web API,为此我通过在Web.config中添加以下内容来启用了CORS

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
  </customHeaders>
</httpProtocol>

我有一个在http://localhost:4200/上运行的angular 4项目。我使用以下代码进行HTTP请求

LoginService

@Injectable()
export class LoginService extends BaseService {

    request: Http;

    constructor(request: Http) {
        super(request);
        this.request = request;
    }

    postLogin(body: Object): Observable<any> {
        var options = this.options;
        options.method = "POST";
        return this.request.post(AppSettings.apiURL + "api/Login", body, options)
            .map(this.extractData)
            .catch(this.handleError);
    }
}

基本服务

@Injectable()
export class BaseService {

    headers: Headers;
    options: RequestOptions;

    constructor(private http: Http) {

        this.headers = new Headers();

        let token: string = localStorage.getItem("TOKEN");

        if (token != undefined)
            this.headers.append("AUTH_TOKEN", token);

        this.options = new RequestOptions({ headers: this.headers });
    }

    public extractData(res: Response) {
        let body = res.json();
        return body || {};
    }

    public handleError(error: Response | any) {
        return Observable.throw(error.message || error);
    }

}

问题

当我为HTTP请求设置标题时

this.headers.append("AUTH_TOKEN", token);

我遇到以下错误

  

api /登录:1加载资源失败:服务器响应   状态405(不允许使用方法)

     

:4200 /#/ login:1无法加载http://localhost:59543/api/Login:   飞行前响应的HTTP状态码为405。

但是当我删除标题时,它可以工作。任何建议或指导将不胜枚举。

1 个答案:

答案 0 :(得分:0)

您应传递令牌类型为

的令牌
this.headers.append("Authorization", "bearer "+token);

在这里,不记名是您的令牌类型。您将默认设置为另一个。