标签: blazor-webassembly

例外:“<”是一个无效的值开始

我有一个带有控制器方法的 Blazor Webassembly 项目,如下所示:

[HttpGet]
    public async Task<List<string>> GetStatesForProfile()
    {
        IConfigurationSection statesSection = configuration.GetSection("SiteSettings:States");
        var sections = statesSection.GetChildren();
        var states = statesSection.GetChildren().Select(s => s.Key).ToList<string>();
        return states;            
    }
Run Code Online (Sandbox Code Playgroud)

剃刀页面调用这个方法:

private async Task<bool> GetStatesModel()
{
    try
    {
        States = await http.GetJsonAsync<List<string>>("api/account/getstatesforprofile");            
        ...
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Exception: {ex.Message}, Inner: {ex.InnerException.Message}");
    }
Run Code Online (Sandbox Code Playgroud)

我得到这个异常:

例外:“<”是值的无效开头。

我从 appsettings.json 文件中读取了这些值,并且值中没有“<”。

{      
  "SiteSettings": {    
    "States": {
      "New York": ["NYC"],
      "California": ["Los Angeles", "San Francisco"]
    }
 }
Run Code Online (Sandbox Code Playgroud)

此外,我在控制器方法中放置了一个断点,但它没有命中。这是什么错误?是从解析json吗?以及如何解决这个问题?

json blazor blazor-webassembly

7
推荐指数
5
解决办法
5178
查看次数

如何在 Blazor WebAssembly 中的 blazor-error-ui 元素中显示错误详细信息?

对于我的 Blazor WebAssembly 应用程序,我希望能够在 blazor-error-ui 元素中显示错误的详细信息(消息、堆栈跟踪)。

我该怎么做呢?

.net asp.net blazor blazor-webassembly

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

如何将 Blazor WebAssembly 连接到数据库

我最近开始开发 Blazor WebAssembly 应用程序,现在我正在解决数据库连接问题。

所有课程和说明都说您需要在 Startup.cs 文件和 appsettings.json 中输入信息,但这些文件不在项目中。

我不明白。在 Blazor WebAssembly 中,有没有办法连接到数据库?

c# database-connection blazor-webassembly

7
推荐指数
2
解决办法
7103
查看次数

NET5.0 Blazor WASM CORS 客户端异常

我有一个 Blazor WASM 应用程序和一个 Web Api,可以通过 HttpClient 由 Blzor 调用。这两个程序都运行在同一台机器上(并且也在生产环境中运行,这对于小型企业应用程序来说不应该是陌生的!)。

从 Blazor 客户端调用 Web Api 导致客户端 CORS 异常

从源“https://localhost:5001”获取“http://localhost:4040/”的访问已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,请将请求的模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。

这是这种情况下的预期行为。

在我用 PHP 开发的一个以前的 api 项目中,它具有相同的客户端行为,我可以通过简单地设置响应头来绕过 CORS 异常,例如

$response = new Response;
$response->setState(false, $route->command);
...
header("Access-Control-Allow-Origin: *");
echo $response;
Run Code Online (Sandbox Code Playgroud)

现在我想在我的 .net 5.0 Web Api 中使用它。我在互联网上找到了不同的文档来解决这个问题

https://docs.microsoft.com/de-de/aspnet/core/security/cors?view=aspnetcore-5.0 https://www.c-sharpcorner.com/article/enabling-cors-in-asp-net -core-api-application/ https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.cors.infrastructure.corspolicybuilder.withorigins?view=aspnetcore-5.0

并在我的 api 中实现它

    public class Startup {
        //---------------------------------------------------------------------

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        //---------------------------------------------------------------------

        public IConfiguration Configuration { get; }

        //---------------------------------------------------------------------

        // This method gets …
Run Code Online (Sandbox Code Playgroud)

c# cors webapi blazor-webassembly

7
推荐指数
2
解决办法
7265
查看次数

C# Blazor WebAssembly:参数 2:无法从“void”转换为“Microsoft.AspNetCore.Components.EventCallback”

我是 blazor C# 的新手,正在尝试制作一个简单的倒数计时器网站。我的网站包括:

  • 显示计时器的文本
  • 开始和停止按钮
  • 用于设置定时器的按钮

我在设置计时器的按钮上遇到了问题。当我点击它时,它不会设置计时器显示并且我收到一个错误Argument 2: cannot convert from 'void' to 'Microsoft.AspNetCore.Components.EventCallback'。我在 Youtube 上搜索 EventCallback 主题,但问题是,我的组件没有分离,而在视频中,示例代码将分离的组件链接在一起。这是代码。
Index.razor

@page "/"
@inherits FrontEnd.Components.Timer

<h1>Timer</h1>

<p class="timer">@Hours.ToString("00"):@Minutes.ToString("00"):@Seconds.ToString("00")</p>
@foreach (var timer in timerCollections)
{
    // Here's the problem
    <button @onclick="SetTimer(timer.Id)">@timer.Hours.ToString("00"):@timer.Minutes.ToString("00"):@timer.Seconds.ToString("00")</button>
}
<br/>
<button @onclick="StartTimer" disabled=@StartButtonIsDisabled>Start</button>
<button @onclick="StopTimer" disabled=@StopButtonIsDisabled>Stop</button>
Run Code Online (Sandbox Code Playgroud)

定时器.cs

using System;
using System.Timers;
using System.Collections.Generic;
using Microsoft.AspNetCore.Components;

namespace FrontEnd.Components
{
    public class TimerStructure
    {
        public int Id { get; set; }
        public int Hours { get; set; }
        public …
Run Code Online (Sandbox Code Playgroud)

c# blazor blazor-webassembly

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

如何将值从页面传递到 Blazor 中的布局?

我有一个布局 ( MainLayout.razor),它有一个名为ShowFooter. 在某些页面上,我希望能够将该标志设置为true,而将其他一些设置为false

我还没有找到任何关于页面(即带有路由的组件)如何与其布局进行通信的明确说明。这可以/应该如何在 Blazor 中完成?

注意:您可能建议使用 2 种布局,一种有页脚,一种没有页脚,但这并不能真正解决我的问题,我希望能够在同一页面的不同时间显示和隐藏页脚。另外,这只是需要在布局和页面之间进行通信的一种情况。还有无数其他的。

blazor blazor-server-side blazor-webassembly

7
推荐指数
2
解决办法
2301
查看次数

你如何在 Blazor WebAssemby 应用程序中实现 System.Text.Json.Serialization.ReferenceHandler.Preserve

我的理解是,当您在对象模型中定义循环引用时,您可以使用此设置来解决出现以下错误的问题:

JsonException: 检测到不支持的可能的对象循环。这可能是由于循环或对象深度大于最大允许深度 32。

但是,我无法成功实施它以使其正常工作。如果有人可以提供有关需要做什么的详细说明,将不胜感激!

我想将应用程序切换为使用 Newtonsoft.JSON,但从我读到的内容来看,这在 Blazor WebAssembly 应用程序中是不可行的?

2020 年 12 月 12 日更新

我在试图弄清楚如何实现 ReferenceHandler.Preserve 时发现的最接近的文章是这些:

https://github.com/dotnet/runtime/issues/42584

https://github.com/dotnet/aspnetcore/issues/28286

基于这些文章,我尝试实施以下解决方案,但都没有奏效......

第一次尝试我在我的 Server 项目的 Startup.cs 类中实现了以下代码:

services.AddControllersWithViews().AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.Preserve;
            });
Run Code Online (Sandbox Code Playgroud)

第二次尝试我在我的服务器项目的 Startup.cs 类中实现了以下代码:

services.AddControllersWithViews(options =>
            {
                options.OutputFormatters.RemoveType<SystemTextJsonOutputFormatter>();
                options.OutputFormatters.Add(new SystemTextJsonOutputFormatter(new JsonSerializerOptions(JsonSerializerDefaults.Web)
                {
                    ReferenceHandler = ReferenceHandler.Preserve
                }));
            });
Run Code Online (Sandbox Code Playgroud)

更新 12/12/2020 上午 11:12 CST

在将我的服务器项目更改为面向 .NET 5 并尝试上面的两个代码选项后,我现在在我的应用程序的每个页面上都收到以下类型的错误:

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100] 未处理的异常呈现组件:JSON 值无法转换为 BusinessManager.Shared.Models.EmploymentBenefit[]。路径:$ | 行号:0 | 字节位置内联:1。

重现原始问题的步骤

创建一个新的 Blazor WebAssembly 应用程序

在 Shared 项目中定义一个具有子对象集合的父类,如下所示:

public virtual List<Child> Children{ get; …
Run Code Online (Sandbox Code Playgroud)

json.net system.text.json blazor-webassembly

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

404 在 Blazor Web 程序集应用程序中找不到 blazor.webassembly.js

我创建了一个新的“托管”Blazor Web 程序集 Razor 类库,并从传统的 .NET 5.0 MVC 应用程序中引用了它。

Razor 类库组件渲染得很好,但是,blazor 客户端 JS 文件出现 404 not found。这是 wasm 而不是服务器端。我正在尝试在传统的 ASP.NET Core 5.0 MVC 应用程序中预渲染组件。我遵循了一些教程,所以我不确定我在这里可能遗漏了什么。这是浏览器中的消息:

404 - Not Found - https://localhost:5001/_framework/blazor.webassembly.js
Run Code Online (Sandbox Code Playgroud)

asp.net-core blazor .net-5 blazor-webassembly asp.net-core-5.0

7
推荐指数
0
解决办法
1712
查看次数

如何更改 blazor wasm 应用程序的基本 URL

为 blazor wasm 托管应用程序生成的模板的基本 URL 以“/”开头(即,https://localhost:5001/用于本地开发或https://www.domain-name.xyz/部署时)。我需要将此基本 URL 改为“/app”,即 ( https://localhost:5001/app) 或 ( https://www.domain-name.xyz/app)。

文档(此处此处)说我必须更改<base />index.html中标记中的基本 URL :

<base href="/app/" />

--pathbase在本地开发时使用命令行参数:

dotnet run --pathbase=/app

我这样做了,并且没有对模板进行任何其他更改。然而,这对我不起作用。我只是在应用程序的所有文件中找不到 404。

此处的此问题表示我还需要通过将“/app”传递给 UseBlazorFrameworkFiles 来更改 Blazor 文件的公开位置:

app.UseBlazorFrameworkFiles("/app")

这也不能解决我的问题。

任何人都可以提供有关如何实现这一目标并保证有效的分步指导。

blazor blazor-client-side asp.net-blazor blazor-webassembly

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

捕获 .NET Maui Blazor 项目中的任何错误并在页面上显示

出于测试目的,我想“捕获”我的应用程序中发生的任何错误并将其显示在页面上(而不是在控制台中)。为此,我在 .Net 6 框架中发现了ErrorBoundary组件。

来自 Microsoft 的 ErrorBoundaries 文档

起初,我在Bazor WebAssembly项目中成功测试了这个组件。

脚步:

  • 创建一个新的 Blazor WebAssembly 项目
  • 创建组件 CustomErrorBoundary.razor (参见下面的代码)
  • 在 MainLayout.razor 中,使用组件 CustomErrorBoundary 包围 @Body 指令
  • 在 FetchData.razor 的代码中抛出异常(见下文)

自定义错误边界

    @inherits ErrorBoundary
    @if (CurrentException is null)
    {
        @ChildContent
    }
    else if (ErrorContent is not null)
    {
        @ErrorContent(CurrentException)
    }
    else
    {
        <div style="background-color: yellow; border: 2px dashed black; white-space: pre; font-family: consolas, monospace;">
            @foreach (var exception in receivedExceptions)
            {
                <div class="received-exception" style="background-color: rgba(255,255,255,0.3); margin: 0.5rem; padding: 0.5rem;">
                    @exception.Message …
Run Code Online (Sandbox Code Playgroud)

asp.net-core blazor blazor-webassembly maui maui-blazor

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