我正在构建一个Blazor UI组件,该组件负责验证登录凭据(用户名和密码)。它使用身份验证服务进行验证。如果凭据无效,则服务将引发InvalidLoginCredentialsException。我正在使用“代码隐藏”方法,C#看起来像这样……
public class LoginFormBase : PageBase
{
// Properties
//
public String Username { get; set; } = String.Empty;
public String Password { get; set; } = String.Empty;
// EventCallback to communicate the result to the parent component
//
[Parameter]
public EventCallback<SingleSignOn> OnLogin { get; set; }
// Event handler
//
protected void btnLogin_OnClick()
{
var user = this.SignOnService.Login(this.Username, this.Password); <!-- throws InvalidLoginCredentialsException
OnLogin.InvokeAsync(user);
}
}
我有一个实现LoginForm组件的剃须刀组件/页面。UI代码看起来像...
@page "/login";
@inherits LoginBase
@using ThriftShopTracker.Components;
<div class="container">
<h1 class="display-8 mt-3 mb-2">Login</h1>
<LoginForm OnLogin="@LoginForm_OnLogin"></LoginForm>
</div>
而“背后的代码”这看起来像...
public class LoginBase : PageBase
{
protected void LoginForm_OnLogin(SingleSignOn user)
{
this.CurrentUser = user;
//
// I WANT TO HANDLE THE EXCEPTION HERE
//
}
}
因此,问题在于,当我输入错误的凭据时,异常将按预期方式引发,但我想在LoginBase代码中进行处理。我想尝试/捕获该异常,以便可以处理该异常,但是由于LoginForm组件中的LoginForm_OnLogin()正在“调用”,因此LoginBase代码中没有任何异常。
我该如何处理在承载它的组件/页面的Blazor子组件中引发的异常?
LoginForm初始化调用堆栈。它不是由父表单启动的,因此不会将错误引发回父表单。
您应该在LoginForm中捕获该错误,然后使用另一个事件将错误的详细信息通知父表单。
例如,添加另一个事件OnLoginFailure(errorInfo)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句