小编Fra*_*nky的帖子

Blazor Timer 调用异步 API 任务来更新 UI

我正在 Blazor 服务器端页面中设置计时器。目标是每 x 秒调用一次 API,并根据返回值更新 UI。

我得到这个代码:

private string Time { get; set; }

protected override void OnInitialized()
{
    var timer = new System.Threading.Timer((_) =>
    {
        Time = DateTime.Now.ToString();
        InvokeAsync(() =>
        {
            StateHasChanged();
        });
    }, null, 0, 1000);
    base.OnInitialized();
}
Run Code Online (Sandbox Code Playgroud)

这效果很好。UI 每秒更新一次新的时间值。但是,我不知道如何调用异步任务来获取值。我想更换线路:

Time = DateTime.Now.ToString();
Run Code Online (Sandbox Code Playgroud)

一行调用以下函数:

private async Task<string> GetValue()
{
    var result = await _api.GetAsync<StringDto>("/api/GetValue");
    return result.Text;
}
Run Code Online (Sandbox Code Playgroud)

我试过这条线:

Time = GetValue().Result;
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

The current thread is not associated with the Dispatcher. Use InvokeAsync() to switch execution to …
Run Code Online (Sandbox Code Playgroud)

blazor blazor-server-side

19
推荐指数
3
解决办法
2万
查看次数

在所有 Blazor 页面上都需要授权

我正在使用 Blazor 并创建了一个服务器托管的 Web 应用程序。我必须像这样在页面顶部放置一个授权行@attribute [Authorize] 以确保用户已登录。

似乎我必须将这一行单独添加到每个页面。是否有一个全局设置可以保护应用程序中的所有页面,当然登录页面除外。

谢谢!

blazor blazor-server-side asp.net-blazor

11
推荐指数
2
解决办法
2871
查看次数

使用 ASP.net Core 托管模型了解 Blazor 程序集

我已经阅读了很多关于 Blazor 和不同托管模型的文章(实际上是 3 篇)。最容易理解的是纯客户端模型,它是一个在 webassembly 上运行的独立应用程序。没有问题。但是我仍然很难理解服务器模型和带有 ASP.NET Core Hosted(复选框)模型的 WebAssembly 模型之间的区别。

请帮我澄清一些事情。

1)对于服务器模型,浏览器使用signalR连接到服务器应用程序。它是 Visual Studio 中的一个应用程序。ASP.NET Core Hosted 模型将单个应用程序拆分为两个独立的应用程序(客户端和服务器)是否正确理解。客户端是一个 WebAssembly 应用程序,它仍然使用 SignalR 与服务器应用程序通信以获取事件和获取数据?

2)在客户端和服务器应用程序之间,除了服务器应用程序引用客户端应用程序之外,我没有看到它们有任何关系或类引用。我可以删除客户端应用程序引用,它仍然可以编译。但是,该站点是空的。那么 Server 应用程序如何知道从 Client 应用程序加载内容的位置呢?仅仅是因为引用了客户端应用程序吗?“勾搭”在哪里?我问这个的另一个原因是我已经开始开发一个使用服务器模型的网站,但是现在如果我想更改为使用 ASP.NET Core Host 的客户端模型,我该怎么做?

3) 在 Server 应用程序中,有 _Layout.cshtml 文件。在客户端应用程序中,wwwroot 下有 index.html。呈现的是 index.html。那么 _Layout.cshtml 是干什么用的呢?

4)我从示例VS模板中看到,Server应用程序用作API服务(天气预报)。在我的环境中,我已经有一个可以使用的专用 API 服务。那么我使用服务器应用程序做什么?托管客户端应用程序只是一个空的 .NET 核心应用程序吗?除了 API 调用之外,您如何使用服务器应用程序?

blazor blazor-client-side blazor-webassembly

5
推荐指数
1
解决办法
931
查看次数

使用 WASM 和服务器端创建相同的 Blazor 应用程序

我想创建一个支持托管 WASM 和服务器端的 blazor 应用程序(实际上是两个应用程序)。它们不需要是动态切换的单个应用程序。实际上,我更喜欢两个独立的应用程序,例如 wasm.myapp.com 和 server.myapp.com。用户可以根据自己的网络环境选择自己喜欢的风格。同样根据业务需求,我可以针对不同的场景(例如浏览器限制)选择一种风格而不是另一种风格。

无论如何,是否可以创建两个共享相同组件的应用程序?一个应用程序是引用另一个应用程序的 shell(反之亦然),还是引用第三个项目的两个 shell 应用程序?基本上,目标是创建一组由两个应用程序共享的 UI 组件/页面。

你如何设置它?

感谢您的任何提示。

blazor blazor-server-side blazor-webassembly

5
推荐指数
1
解决办法
2404
查看次数

使用 DevOps 部署 Azure Function

我已经构建了一个 Azure 函数。我可以直接从 Visual Studio(右键单击项目,然后“发布”)将其部署到我的 Azure FunctionApps,没有任何问题。但是,当我尝试使用 Azure DevOps 构建和部署它时,我收到以下错误,但我不知道这意味着什么。我什至不知道什么是Kudu?

The network path was not found.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IO.IOException: The network path was not found.


Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception …
Run Code Online (Sandbox Code Playgroud)

azure devops azure-function-app

3
推荐指数
1
解决办法
776
查看次数

无法使用子目录直接访问托管在 Azure 静态应用程序中的 Blazor WASM

我有一个托管在 Azure 静态应用程序上的 Blazor WASM,网站运行良好。但我意识到,如果您向某人提供指向网站上某个页面(例如https://www.myblazor.com/path/do )的链接,并且此人以前从未访问过该网站,则该网站将显示:

请求的内容不存在。

HttpStatusCode: 404
ErrorCode: WebContentNotFound
RequestId : 18382fd7-f01e-0015-31cc-67b610000000
TimeStamp : 2021-06-23T01:10:44.3896906Z
Run Code Online (Sandbox Code Playgroud)

该人必须首先访问根https://www.myblazor.com,网站加载后,他可以手动转到特殊页面。

为什么是这样?是因为我使用的是静态文件服务,而不是常规的应用服务吗?有可能让它发挥作用吗?链接到网站上的特定页面(不一定是根页面)是很常见的。

感谢您的任何建议。

blazor blazor-webassembly

3
推荐指数
1
解决办法
976
查看次数

除 Body 之外的 Blazor 页面元素

我有一个 Blazor 服务器端应用程序,试图了解其结构。在 MainLayout.razor 页面中,我看到了标签 @Body,这是每个页面内容的呈现位置。

我想知道,是否可以向 mainLayout 页面添加额外的渲染元素?例如,@Header 部分。而且我更愿意在每个单独的页面中定义这个部分。

换句话说,对于每个页面,除了主要内容之外,还需要定义Header、Footer,或者我在MainLayout中定义的任何渲染元素。这样,我可以自定义每个页面唯一的页眉/页脚元素。

谢谢你的帮助。

blazor blazor-server-side

1
推荐指数
1
解决办法
764
查看次数

CsvHelper 动态列映射

我按照此示例将自定义列名称映射到我的类模型:

CsvHelper 按名称映射

在这个特定部分:

public FooMap()
{
    Map(m => m.Id).Name("ColumnA");
    Map(m => m.Name).Name("ColumnB");
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用字符串作为列名而不是对其进行硬编码?像这样的事情——

public FooMap()
{
    Map("Col1").Name("ColumnA");
    Map("Col2").Name("ColumnB");
}
Run Code Online (Sandbox Code Playgroud)

“Col1”和“Col2”是我的班级模型的属性。我尝试过使用反射,但没有成功:

Map(x => typeof(MyClassModel).GetProperty("Col1")).Name("ColumnA");
Run Code Online (Sandbox Code Playgroud)

请让我知道我想要实现的目标是否可能。一些附加信息——列映射(源和目标)都存储在表中。

谢谢!

c# csvhelper

1
推荐指数
1
解决办法
5193
查看次数

解析这个特殊格式的文件

我有一个这样格式化的文件——

{2000}000000012199{3100}123456789*{3320}110009558*{3400}9876
54321*{3600}CTR{4200}D2343984*JOHN DOE*1232 STREET*DALLAS TX
78302**{5000}D9210293*JANE DOE*1234 STREET*SUITE 201*DALLAS
TX 73920**
Run Code Online (Sandbox Code Playgroud)

基本上,大括号中的数字表示字段,后跟该字段的值。例如,{2000}是“金额”字段,其值为 121.99(隐含十进制)。{3100}是“AccountNumber”字段,其值为 123456789*。

我试图找出一种将文件拆分为“记录”的方法,并且每个记录将包含记录类型(大括号中的值)和记录值,但我不知道如何实现。

如何在不循环遍历输入中每个字符的情况下执行此操作?

c#

0
推荐指数
1
解决办法
81
查看次数