.NET CORE FindByEmailAsync операция была отменена для вызова REST - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь собрать приложение с Blazor и ядром .net.У меня есть контроллер учетной записи, который я использую для проверки учетных данных пользователя.Если я запускаю приложение в режиме отладки из VS (IIS) и отправляю учетные данные для входа с моей веб-страницы, то userManger вернет правильного пользователя.Но если я запускаю свое приложение из cmd (отслеживание dotnet), то userManager.FindByEmailAsync завершится с исключением:

System.OperationCanceledException: операция была отменена.

Этоэто стек вызовов из cmd:

Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware [1] Произошло необработанное исключение при выполнении запроса.System.OperationCanceledException: операция была отменена.в System.Threading.CancellationToken.ThrowOperationCanceledException () в Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore 9.FindByEmailAsync(String normalizedEmail, CancellationToken cancellationToken) at Microsoft.AspNetCore.Identity.UserManager 1.FindByEmailAsync (Строковое электронное письмо) в ProjectManagement.BlazorClient.Server.Controllers.Users \ lukha \ source \ repos \ ProjectManagement \ ProjectManagement.BlazorClient.Server \ Controllers \ AccountController.cs: строка 43 в Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute, объектный объект-мастер объекта, мастер-класс-объектист объекта (IActionResultMecutor)] arguments) в System.Threading.Tasks.ValueTask`1.get_Result () в Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync () в Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvore.InC ().Mvc.Internal.ControllerActionInvoker.Rethrow (контекст ActionExecutedContext) в Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next (State & next, Scope & scope, Object & state, Boolean & isCompleted) в Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync () в Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilourceInker.InourceInInCore.INC ()Ретроу (контекст ResourceExecutedContext) в Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next (Состояние и следующее, Область и область действия, Объект и состояние, Логическое значение & isCompleted) в Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAv.Mac ().Internal.ResourceInvoker.InvokeAsync () в Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke (HttpContext httpContext) в Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke (контекст HttpContext) 101 * код

мой код контроллера *1013* 1013 *1013* мой код 1011 * * *:

[Route("api/[controller]")]
[ApiController]
public class AccountController : ControllerBase
{
    private readonly SignInManager<ApplicationUser> _signInManager;
    private readonly UserManager<ApplicationUser> _userManager;
    public AccountController(
        UserManager<ApplicationUser> userManager,
        SignInManager<ApplicationUser> signInManager,
        ILoggerFactory loggerFactory
    )
    {
        _signInManager = signInManager;
        _userManager = userManager;
    }

    [HttpPost("[action]")]
    [AllowAnonymous]
    public async Task<IActionResult> Login([FromBody]LoginRequest request)
    {
        var user = await _userManager.FindByEmailAsync(request.UserName);
    }        
}

Редактировать: Если я запускаю приложение из cmd и вызываю этот контроллер из Почтальона, то все работает нормально.Это код моей страницы:

<form>
  <div>
    <label>Email: </label>
    <input required name="email" bind="@email" />
  </div>
  <div>
    <label>Password: </label>
    <input required type="password" name="password" bind="@password" />
  </div>
<button onclick=@(() => ButtonLogin_click())>Login</button>
</form>

@functions{
  string email;
  string password;

  protected async Task ButtonLogin_click()
  {
    var result = await Http.PostJsonAsync<object>("api/account/Login", new LoginRequest { UserEmail = email, Password = password});
  }
}

Есть идеи, что не так с моим кодом?

1 Ответ

0 голосов
/ 05 декабря 2018

@ lukesss:

Если я запускаю приложение из cmd и вызываю этот контроллер из Почтальона, тогда все работает нормально

Вы имеете в виду, что вы работаете с Web APIхорошо, не так ли?Ну, нет никаких причин, по которым это не должно происходить.

Это компонент Blazor выше?Если это так, вы не должны использовать тег формы Html.Также необходимо добавить атрибут type к элементу button со значением «button».

Теперь, когда вы нажмете на элемент управления кнопки, будет вызван Http.PostJsonAsync, выполнив вызов Ajax (используя Fetch API) для вашего веб-API, вместо того, чтобы отправлять сообщение обратно.

Нет тегов формы, нет сообщений в Blazor.

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

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