我目前正在使用 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 互操作调用
- 如何在 Razor 视图之外进行 JSinterop 并等待它准备好?(就像来自 .cs 类)
- 是否有另一种方法可以在 Blazor 中发布传统形式的帖子?
- 有没有办法做到这一点?