Угловой 7 & C # Core.Почему я получаю http://localhost:5000/Account/Login?ReturnUrl=%2Fapi%2Fimage? - PullRequest
0 голосов
/ 16 мая 2019

Я использую авторизацию идентификации и JWT.

[HttpPost("/token")]
public async Task Token([FromBody] User user)
{
  var username = user.Login;
  var password = user.Password;

  var identity = await GetIdentityAsync(username, password);
  if (identity == null)
  {
    Response.StatusCode = 400;
    await Response.WriteAsync("Invalid username or password.");
    return;
  }

  var now = DateTime.UtcNow;
  var jwt = new JwtSecurityToken(
          issuer: AuthOptions.ISSUER,
          audience: AuthOptions.AUDIENCE,
          notBefore: now,
          claims: identity.Claims,
          expires: now.Add(TimeSpan.FromMinutes(AuthOptions.LIFETIME)),
          signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(),
            SecurityAlgorithms.HmacSha256));

  var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

  var response = new
  {
    access_token = encodedJwt,
    user = new
    {
      login = user.Login,
      role = identity.FindFirst(ClaimsIdentity.DefaultRoleClaimType).Value
    }
  };

  Response.ContentType = "application/json";
  await Response.WriteAsync(JsonConvert.SerializeObject(response,
    new JsonSerializerSettings { Formatting = Formatting.Indented }));
}

async Task<ClaimsIdentity> GetIdentityAsync(string userName, string password)
{
  var result = await _signInManager.PasswordSignInAsync(userName, password, false, false);
  if (result.Succeeded)
  {
    var user = await _userManager.FindByNameAsync(userName);
    if (user != null)
    {
      var role = (await _userManager.GetRolesAsync(user)).SingleOrDefault();

      var claims = new List<Claim>
      {
        new Claim(ClaimsIdentity.DefaultNameClaimType, user.UserName),
        new Claim(ClaimsIdentity.DefaultRoleClaimType, role)
      };

      return new ClaimsIdentity(claims, "Token", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
    }
  }

  return null;
}

Авторизация работает успешно.Я получаю токен на моем клиентском приложении.Но затем я отправляю изображение на сервер (url: '/ api / image') и получаю сообщение об ошибке "Http error response для http://localhost:5000/Account/Login?ReturnUrl=%2Fapi%2Fimage: 404 Not Found".Почему я получаю этот URL, а не http://localhost:5000/api/image?И как решить эту проблему?

Отправить изображение:

add() {
    const id = uuid.v4();
    const formData = new FormData();
    formData.append('image', this.file, id);

    this.imageService.upload(formData).subscribe(() => {

    });
}

onSelectFile(event) {
    this.file = event.target.files[0];

    const reader = new FileReader();
    reader.readAsDataURL(this.file);
    reader.onload = (event) => {
        this.url = event.target['result'];
    };
}

ImageService:

url = 'api/image';
headers: HttpHeaders;

constructor(private httpService: HttpService, private authService: AuthService) {
    const token = localStorage.getItem(this.authService.tokenKey);
    this.headers = new HttpHeaders().set('Authorization', 'Bearer ' + token);
}

upload(image: FormData) {
    return this.httpService.postData(this.url, image, this.headers);
}

HttpService:

postData(url: string, body: any, headers?: HttpHeaders) {
    return this.http.post(`${environment.apiUrl}/${url}`, body, { headers });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...