【问题标题】:How to resolve Invalid Cast exception?如何解决无效的 Cast 异常?
【发布时间】:2020-07-16 05:25:34
【问题描述】:

在我的剃刀视图中,我遇到了一个无效强制转换异常的问题。我已经为身份验证创建了一个登录剃须刀,但我正面临这个问题。任何人都可以建议解决这个问题吗?我这里附上代码sn-p并发出SS。

代码 sn-p

private async Task<bool> ValidateUser()
{
    //assume that user is valid
    //call an API

    var returnedUser = await userService.LoginAsync(user);
    
    if(returnedUser.EmailAddress != null)
    {
        await sessionStorage.SetItemAsync("emailAddress", returnedUser.EmailAddress);
        await sessionStorage.SetItemAsync("token", returnedUser.Token);

        ((CustomAuthenticationStateProvider)AuthenticationStateProvider).MarkUserAsAuthenticated(user.EmailAddress);
        NavigationManager.NavigateTo("/index");
    }
    else
    {
        LoginMesssage = "Invalid username or password";
    }

    return await Task.FromResult(true);
}

【问题讨论】:

  • 显然AuthenticationStateProvider 不是CustomAuthenticationStateProvider 的子类(和/或没有实现)。要解决此问题,请删除强制转换或确保您要转换的对象实际上是您要转换到的类型。
  • 发布您注册提供者的启动部分。

标签: c# razor blazor


【解决方案1】:

好的。这是您提供的示例中的 ValidateUser 方法的代码链接:

private async Task<bool> ValidateUser()
{
    //assume that user is valid
    //call an API

    var returnedUser = await userService.LoginAsync(user);
    
    if(returnedUser.EmailAddress != null)
    {
        await sessionStorage.SetItemAsync("emailAddress", returnedUser.EmailAddress);
        await sessionStorage.SetItemAsync("token", returnedUser.Token);

        ((CustomAuthenticationStateProvider)AuthenticationStateProvider).MarkUserAsAuthenticated(user.EmailAddress);
        NavigationManager.NavigateTo("/index");
    }
    else
    {
        LoginMesssage = "Invalid username or password";
    }

    return await Task.FromResult(true);
}

显然这个对 MarkUserAsAuthenticated 的调用是错误的:

MarkUserAsAuthenticated(user.EmailAddress);

应该是:

MarkUserAsAuthenticated(returnedUser.EmailAddress);

希望这行得通...

【讨论】:

  • 我建议您不要再使用该示例。编写此示例的人需要自己学习 Blazor 和 Asp.Net Core...您应该通过访问 chris sainty 和 Blazor 大学的网站来提高自己的技能。
  • 但是在用户服务类中的登录异步方法中,我遇到了类似“提供了无效的请求 uri 或请求 uri 必须是绝对 uri 或必须设置基地址”的问题。响应 = 等待 _httpClient.SendAsync(requestMessage);你能建议我解决这个问题吗?
  • 我的朋友,这是另一个问题的另一个问题。你尝试过我提出的改变吗?它仍然给你同样的错误吗?报告这个...
  • 我更改了您的解决方案,但由于登录异步方法中发生异常,返回的用户没有返回任何值,所以我无法验证您的解决方案,您能建议我解决这个问题吗?跨度>
  • 是的,注释掉 LoginAsync 方法中的所有代码,除了最后两个。更改第一行的代码以创建新用户: var returnedUser = New User {}; return await Task.FromResult(returnedUser);
猜你喜欢
  • 2018-06-22
  • 2018-02-26
  • 1970-01-01
  • 2016-03-29
  • 2017-09-15
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多