OnPostAsyn c не вызывается - PullRequest
       62

OnPostAsyn c не вызывается

0 голосов
/ 24 февраля 2020

Я пытаюсь внедрить отправителя электронной почты в моем приложении Blazor на стороне сервера. Я следую этому примеру:

https://kenhaggerty.com/articles/article/aspnet-core-22-smtp-emailsender-implementation

У меня есть представление Home.cs html

@page "/Home"
@model UserManagement.HomeModel
@{
    ViewData["Title"] = "Home";

}

<div class="row">
    <div class="col-6">
        <label class="alert alert-success">@Model.EmailStatusMessage</label>
    </div>
</div>
<div class="row">
    <div class="col-6">
        <form method="post">
            <div class="form-group">
                <label asp-for="Email"></label>
                <input asp-for="Email" class="form-control" />
                <span asp-validation-for="Email" class="text-danger"></span>
            </div>
            <button type="submit" class="btn btn-primary">Email Test</button>
        </form>
    </div>
</div>

И Home.cs html .cs

 public class HomeModel : PageModel
    {
        private readonly IEmailSender _emailSender;

        public HomeModel(IEmailSender emailSender)
        {
            _emailSender = emailSender;
        }

        public string EmailStatusMessage { get; set; }

        [Required]
        [BindProperty]
        public string Email { get; set; }

        public void OnGet()
        {
        }

        public async Task OnPostAsync()
        {
            if (!ModelState.IsValid)
            {

            }

            var email = Email;

            var subject = "Email Test";

            var message = "This is a test message.";

            await _emailSender.SendEmailAsync(email, subject, message);

            EmailStatusMessage = "Send test email was successful.";


        }
    }
}

Когда я нажимаю кнопку, я получаю ошибку 400, и отладчик никогда не останавливается на моей точке останова, которая у меня есть установить в методе OnPostAsyn c. Я немного запутался, почему этого никогда не происходит.

Можете ли вы разгадать эту тайну?

1 Ответ

0 голосов
/ 25 февраля 2020

Кажется, я наткнулся на другой пост, где обсуждалась похожая проблема. Пост enet объясняет это:

Сообщение со страницы сервера Blazor на страницу Razor http error 400

Я цитирую:

Method = "post" не применяется в Blazor или любых других платформах SPA. В Blazor есть специальный код, который предотвращает пост обратно. Конечно, вы можете форсировать обратную передачу, что означает, что срок действия вашей страницы Blazor истекает, и если вы пытаетесь вернуться к ней, она перерисовывается, и все ваше предыдущее состояние теряется.

Что вы пытаетесь сделать здесь нужно получить учетные данные пользователя в компоненте Blazor, а затем попытаться отправить данные в модель страницы Razor для проверки. Вы не можете этого сделать, и вы не должны этого делать. Вы должны перенаправить своего пользователя на страницу входа, на которой он вводит свои учетные данные, и эти учетные данные должны быть проверены в каком-либо хранилище, например, в базе данных SqlServer, а затем возвращено в приложение Blazor. Помните, что перенаправление на страницу Razor означает, что срок действия вашего приложения Blazor истек. Еще раз вы не публикуете учетные данные пользователя на странице бритвы входа. Пользователь должен ввести свои учетные данные в Login.cs html

...