小编VGe*_*iev的帖子

重试Observable之前在HTTP上更改标头

我在前端使用TypeScript的Angular 2。我正在尝试实现在每个请求上设置授权标头的http拦截器。如果访问令牌过期,我正在尝试重试该请求,请在重试之前使用带有刷新令牌的新访问令牌并更改当前请求的标头。

如何在retryWhen运算符中更新请求标头?

例如,这里是HttpInterceptor:

export class HttpInterceptor extends Http {
    get(url: string, options?: RequestOptionsArgs): Observable<Response> {
        return super.get(url, this.setRequestAuthorizationHeader(options)).retryWhen((errors: any) => this.errorHandler(errors));
    }

    private setRequestAuthorizationHeader(options?: RequestOptionsArgs): RequestOptionsArgs {
        // some checks
        // get accessToken from localStorage
        options.headers.append('Authorization', 'Bearer ' + accessToken);
    }

    private errorHandler(errors) {
        return errors.switchMap((err) => {
        if (err.status === 401) {
            let closedSubject = new Subject();

            this.authenticationService.refreshToken()
                .subscribe(data => {
                    // How to update authorization header? This doesn't work.
                    this.defaultOptions.headers.append('Authorization', 'Bearer ' + data.accessToken);

                    closedSubject.next();
                });

            return …
Run Code Online (Sandbox Code Playgroud)

observable rxjs typescript angular

5
推荐指数
1
解决办法
1347
查看次数

$(SolutionDir) 和 $(SolutionPath) 在 Visual Studio 2017 中无法正常工作

我尝试在 Visual Studio 2017 中的文件中使用$(SolutionDir)或,但它们无法按预期工作。$(SolutionPath).csproj

在 MSBuild 15 类型项目(例如 .NET Core、.NET Standard 类库)中,使用$(SolutionDir)in a<PostBuildEvent>有效,但$(ProjectDir)只会生成一个空字符串。

In 其他元素(例如AssemblyFilein UsingTask$(SolutionDir)生成一个空字符串并$(SolutionPath)给出当前项目目录。

此问题已通过https://developercommunity.visualstudio.com/content/problem/11118/postbuild-event-and-macros-issues.html向 Microsoft 报告,但该问题已标记为“已关闭”,因为问题已修复在 RTM 中,尽管有几个人报告发布版本存在问题。

msbuild .net-core visual-studio-2017

5
推荐指数
0
解决办法
4594
查看次数