【问题标题】:.NET CORE FindByEmailAsync operation was canceled for REST call.NET CORE FindByEmailAsync 操作已取消 REST 调用
【发布时间】:2019-05-06 07:50:34
【问题描述】:

我正在尝试使用 blazor 和 .net 核心构建应用程序。 我有用于用户凭据验证的帐户控制器。如果我从 VS (IIS) 在调试中运行应用程序并从我的网页发送登录凭据,那么 userManger 将返回正确的用户。但是如果我从 cmd (dotnet watch run) 运行我的应用程序,那么 userManager.FindByEmailAsync 将以异常结束:

System.OperationCanceledException:操作已取消。

这是来自 cmd 的调用堆栈:

Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1] 执行请求时发生未处理的异常。 System.OperationCanceledException:操作已取消。 在 System.Threading.CancellationToken.ThrowOperationCanceledException() 在 Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore9.FindByEmailAsync(String normalizedEmail, CancellationToken cancellationToken) at Microsoft.AspNetCore.Identity.UserManager1.FindByEmailAsync(字符串电子邮件) 在 C:\Users\lukha\source\repos\ProjectManagement\ProjectManagement.BlazorClient.Server\Controllers\AccountController.cs:line 43 中的 ProjectManagement.BlazorClient.Server.Controllers.AccountController.Login(LoginRequest 请求) 在 Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper 映射器,ObjectMethodExecutor 执行器,对象控制器,对象 [] 参数) 在 System.Threading.Tasks.ValueTask`1.get_Result() 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext 上下文) 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(状态&下一个,范围&范围,对象&状态,布尔& isCompleted) 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter() 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext 上下文) 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(状态&下一个,范围&范围,对象&状态,布尔& isCompleted) 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync() 在 Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext) 在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext 上下文)

这是我的控制器代码:

[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 运行应用程序并从 Postman 调用此控制器,那么一切正常。这是我的页面代码:

<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});
  }
}

知道我的代码有什么问题吗?

【问题讨论】:

  • 你确定vs和命令行使用的是同一个端口号吗?
  • 从 vs 应用运行在端口 50098 和从 cmd 端口 50099
  • 客户对此负责吗?
  • 只是虚拟帐户:user@email.com/password

标签: c# asp.net-core asp.net-core-identity blazor


【解决方案1】:

@lukesss:

如果我从 cmd 运行应用程序并从 Postman 调用此控制器 然后一切正常

您的意思是您的 Web API 工作正常,不是吗?好吧,没有理由不这样做。

这是上面的 Blazor 组件吗?如果是,则不得使用 Html 表单标记。此外,您必须将 type 属性添加到值为“button”的按钮元素。

现在,当您点击按钮控件时,将调用 Http.PostJsonAsync,对您的 Web API 执行 Ajax 调用(使用 Fetch API),而不是回发。

没有表单标签,没有在 Blazor 中回发。

希望对你有帮助……

【讨论】:

  • 谢谢!如果我删除了表单标签,那么我可以使用从 cmd 运行的应用程序从网页调用我的控制器。但是如果应用程序从 Visual Studio 运行,为什么它与表单标签一起工作仍然存在问号?
猜你喜欢
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
相关资源
最近更新 更多