0

我目前正在使用 Blazor,它处理表单提交的方式与我习惯的方式完全不同。以下是其工作原理的简要说明“Blazor 将拦截表单提交事件并将它们路由回剃刀视图”。所以没有 HTTP 帖子,一切都是通过 SignalR 发生的。我需要 IBM webSEAL 能够形成一个用户名/密码,该用户名/密码将保存在我的应用程序“AspNetCore ProtectedLocalStorage”中,以便我可以在会话中使用它。我需要它在没有其他方法的 SOAP 服务上进行身份验证。(以实现单点登录)。

可以编写传统的表单,而不是使用 EditForm 组件。

<form method="post" action="/login" target="_self" enctype="multipart/form-data">

棘手的部分是我需要创建一个控制器类来接收 HTTP 发布请求,而我这样做的方式是让它像一个 API 一样工作。

[Microsoft.AspNetCore.Mvc.Route("login")]
[ApiController]
public class Login : ControllerBase
{
    private IJSRuntime _jSRuntime;
    private IDataProtectionProvider _protectionProvider;
    public ProtectedLocalStorage localStorage;

    public Login(IJSRuntime jSRuntime, IDataProtectionProvider protectionProvider)
    {
        _jSRuntime = jSRuntime;
        _protectionProvider = protectionProvider;
        localStorage = new ProtectedLocalStorage(_jSRuntime, _protectionProvider);
    }

    public async Task<string> Create([FromForm] WSCredentials credentials)
    {
        localStorage.SetAsync("credentials", credentials);
        return "something... I dunno";
    }
}

问题是我无法调用localStorage.SetAsync,因为它会引发异常:此时无法发出 JavaScript 互操作调用

  1. 如何在 Razor 视图之外进行 JSinterop 并等待它准备好?(就像来自 .cs 类)
  2. 是否有另一种方法可以在 Blazor 中发布传统形式的帖子?
  3. 有没有办法做到这一点?
4

0 回答 0