Вызов углового маршрута из веб-API ASP.NET - PullRequest
0 голосов
/ 02 мая 2019

Я настроил свое приложение для отправки электронного письма с подтверждением пользователю после регистрации. После завершения регистрации пользователь увидит страницу, на которой написано, что вам нужно подтвердить ваш адрес электронной почты:

<div *ngIf="!emailConfirmed">
  <p> Please activate your account by clicking the relevant link in your Email </p>
</div>

<div *ngIf="emailConfirmed">
  <p>
   Your Email is now confirmed, please click the below button to Log-In.
  </p>
  <a class="btn btn-md btn-success btn-color" [routerLink]="['/login']">
    Sign In
  </a>
</div>

И emailConfirmed - это просто простая переменная, которую я определил в машинописном файле emailConfirmed:

export class EmailConfirmed {
  public emailConfirmed: boolean;
}

После того, как пользователь щелкнет ссылку в своем электронном письме, его / ее учетная запись будет подтверждена, а затем приложение будет перенаправлено на страницу ConfirmEmail, используя следующий код:

[HttpGet]
[Route("ConfirmEmail", Name = "ConfirmEmailRoute")]
public async Task<IActionResult> ConfirmEmail(string userId = "", string code = "")
{
    //....
    IdentityResult result = await UserManager.ConfirmEmailAsync(userId, code);
    if (result.Succeeded)
    {
        return Redirect("http://localhost:5000/emailconfirmed");
    }
}

Теперь вопрос: я не знаю, как я могу установить переменную emailConfirmed компонента EmailConfirmed в true из WEB API и в строке return Redirect, чтобы на этот раз пользователь увидел второе сообщение ? Также я сомневаюсь, что выбрал лучший способ перенаправить приложение на угловой маршрут, используя линию return Redirect("http://localhost:5000/emailconfirmed");.

Ответы [ 3 ]

1 голос
/ 02 мая 2019

@ ManojChoudhari прав. Вы не можете проложить маршрут так!

Сначала это должен быть "HttpPost". Верните ответ, а затем перенаправьте на клиентскую сторону с помощью маршрутизатора. Вот маленький пример. Это не учитывает разделение интересов!

Serverside

Модель

public class UserRequest {
    public string UserId { get; set; }
    public string Code { get; set; }
}

public class EMailConfirmationResponse {
    public boolean EmailConfirmed { get; set; }
}

Контроллер

...
[HttpPost]
[Route("ConfirmEmail", Name = "ConfirmEmailRoute")]
public async Task<IHttpActionResult> ConfirmEmail(UserRequest user)
{
    var result = await UserManager.ConfirmEmailAsync(user.UserId, user.Code)
    if (result.Succeeded)
    {
        return Ok(new EMailConfirmationResponse { EmailConfirmed = true });
    }
    else
    {
        return BadRequest("An error occurred confirming the given email-address.");
    }
}
...

* 1013 на стороне клиента * import { Component } from "@angular/core"; import { Router } from "@angular/router"; import { HttpClient } from "@angular/common/http"; @Component({ selector: "your", templateUrl: "./your.component.html" }) export class YourAngularComponent { constructor( private _router: Router, private _http: Http ) { ... // put this into your method const httpOptions = { headers: new HttpHeaders({'Content-Type': 'application/json', 'Authorization': 'my-auth-token'}) }; this.http .post("webapiurl", { userId: "TheUserId", code: "TheUserCode" }, httpOptions) .subscribe((response) => { const emailConfirmationResponse = response.json(); if(emailConfirmationResponse.emailConfirmed) { this._router.navigate(["emailconfirmed"]); } }, (err: HttpErrorResponse) => { // do some error handling here: console.log(err.error); console.log(err.name); console.log(err.message); console.log(err.status); } ); ...

0 голосов
/ 02 мая 2019

Полагаю, прямо из webapi вы не можете перенаправить.используйте ответ API, а затем в угловом перенаправлении на другую страницу или домен.

0 голосов
/ 02 мая 2019

Вам нужно понять одну вещь: угловые маршруты доступны только на стороне клиента.Вы не сможете перенаправить пользователя на угловой шаблон со стороны сервера.

Возможно, у вас есть возможность вернуть флаг из веб-API.Этот флаг должен быть уникальным, а затем angular должен перенаправлять пользователя на другую страницу.

Ваш код API должен быть:

[HttpGet]
[Route("ConfirmEmail", Name = "ConfirmEmailRoute")]
public async Task<IActionResult> ConfirmEmail(string userId = "", string code = "")
{
    //....
    IdentityResult result = await UserManager.ConfirmEmailAsync(userId, code);
    if (result.Succeeded)
    {
        return Ok();
    }
    else
    {
        return BadRequest("An error occurred confirming the given email-address.");
    }
}

В вашем машинописном тексте на стороне клиента вы можете добавить следующий код:

//// result = call web api and take result
//// if result is 200 OK then
this.router.navigate(['/your-path'])

Надеюсь, это поможет.

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