在我的代码中,我有一个名为“ShowMessageBoxAsync”的任务。我想使用此代码向用户显示(并等待)DisplayAlert 并返回结果。像这样: var messageBoxResult = await View.ShowMessageBoxAsync("这是一个错误");
ShowMessageBoxAsync 的代码是:
public async System.Threading.Tasks.Task<bool> ShowMessageBoxAsync(string message)
{
var result = false;
Device.BeginInvokeOnMainThread(async () =>
{
result = await DisplayAlert("Error", message, "OK", "Cancel");
});
return result;
}
Run Code Online (Sandbox Code Playgroud)
在我添加 Device.BeginInvokeOnMainThread 之前,该任务给了我一个异常,表明它没有在主/UI 线程上运行。所以添加了BeginInvokeOnMainThread后,就开始正常工作了。然而,问题在于代码直接转到结果,而不是等待“await DisplayAlert”的结果。
只有在 Device.BeginInvokeOnMainThread 代码完成后才可能返回“result”的值吗?
我对此做了一些研究,有人建议使用 TaskCompletionSource,但这会阻止 UI 线程并且 DisplayAlert 根本不显示。
我创建了一个 Blazor 客户端应用程序,在该应用程序中,我有许多具有自定义要求和处理程序的授权策略。其中之一检查URL中请求的ID并检查登录用户是否可以查看该资源。
\n\n例如,通过客户端,用户导航到https://localhost/resource/1f28e41c-bc75-44d6-9eef-d46b66b649c7 ,这是我的 API 上的资源。
\n\nI\xe2\x80\x99m 使用以下代码查看请求路径:
\n\nvar httpContext = _httpContextAccessor.HttpContext;\nstring requestedPath = httpContext.Request.Path.ToString();\nRun Code Online (Sandbox Code Playgroud)\n\n这曾经有效,requestedPath 确实包含值 \xe2\x80\x9c1f28e41c-bc75-44d6-9eef-d46b66b649c7\xe2\x80\x9d
\n\n但是,在 _Host.cshtml 中,我已将渲染模式从“ServerPrerendered”更改为“Server”。这是因为在页面调用期间代码在不同位置执行了两次。
\n\n由于我更改了此设置,requestedPath 值始终为“/_blazor”。
\n\n所以我想知道,在 blazor 应用程序中,如果渲染模式设置为“服务器”,是否可以获得请求的路径?
\n