asp.net api Конечная точка не была повреждена из углового 8 клиента - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь вызвать конечную точку refreshToken из углового 8-го клиента, и она, похоже, не срабатывает.Кто-нибудь может заметить проблему.Я даже пытался сопоставить регистр параметров, но это не имело значения.Я подтвердил, что this.refreshLoginUrl является правильным.Это связано с последовательностью параметров отправки или любым другим несоответствием

на стороне клиента

getRefreshLoginEndpoint<T>(): Observable<T> {

        let header = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' });

        let params = new HttpParams()
            .append('refreshtoken', this.authService.refreshToken)
            .append('accesstoken', this.authService.accessToken)
            .append('username', this.authService.currentUser.userName)
            .append('userid', this.authService.currentUser.id)
           //.append('grant_type', 'refresh_token')
           //.append('scope', 'openid email phone profile offline_access roles')
           //.append('resource', window.location.origin);
        let requestBody = params.toString();
        return this.http.post<T>(this.refreshLoginUrl, requestBody, { headers: header })
        .pipe(catchError(error => {
            return this.handleError(error, () => this.getRefreshLoginEndpoint());
        }));
    }

serverside

    public class RefreshTokenModel
    {
        public int UserID { get; set; }
        public string UserName { get; set; }
        public string AccessToken { get; set; }
        public string RefreshToken { get; set; }
    }

  [AllowAnonymous]
        [HttpPost("token/refresh")]
        [Produces("application/json")]
        public async Task<IActionResult> RefreshToken(RefreshTokenModel model)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(new OpenIdConnectResponse
                {
                    Error = OpenIdConnectConstants.Errors.InvalidGrant,
                    ErrorDescription = "Invalid request data"
                });
            }

            var token = await _identityService.RefreshToken(model);

            if (token == null)
            {
                return BadRequest(new OpenIdConnectResponse
                {
                    Error = OpenIdConnectConstants.Errors.InvalidGrant,
                    ErrorDescription = "Please check that your credentials are correct"
                });
            }

            return Ok(token);
        }

1 Ответ

0 голосов
/ 26 сентября 2019

НЕ используйте httpParamas для отправки параметров, просто простой объект

const params = {
     userID: this.authService.currentUser.id,
     userName:this.authService.currentUser.userName,
     accessToken:this.authService.accessToken,
     refreshToken:null
}
return this.http.post<T>(this.refreshLoginUrl, params)
    .pipe(catchError(error => {
        return this.handleError(error, () => this.getRefreshLoginEndpoint());
    }));

И используйте его в своем API [FromBody]

public async Task<IActionResult> RefreshToken([FromBody] RefreshTokenModel model){...}

ПРИМЕЧАНИЕ.не устаревший http

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...