Blazor webassembly 如何在Blazor WebAssembly中从sessionStorage读取大字符串?我的结果被截断了

Blazor webassembly 如何在Blazor WebAssembly中从sessionStorage读取大字符串?我的结果被截断了,blazor-webassembly,.net-5,Blazor Webassembly,.net 5,我正在开发一个新的Blazor WebAssembly应用程序(NET 5.0),从会话存储中读取一个大字符串(约3000个字符)时遇到问题。我得到一个结果,但它被截断,中间加了一个“…”。结果总是正好是1000字节 在下面的代码中,dataKey是我要读取的数据的字符串键。JSRuntime的注入方式如下: @inject IJSRuntime JSRuntime // Initial try (truncated) var myValue1 = await JSRuntime.Invoke

我正在开发一个新的Blazor WebAssembly应用程序(NET 5.0),从会话存储中读取一个大字符串(约3000个字符)时遇到问题。我得到一个结果,但它被截断,中间加了一个“…”。结果总是正好是1000字节

在下面的代码中,dataKey是我要读取的数据的字符串键。JSRuntime的注入方式如下:

@inject IJSRuntime JSRuntime
// Initial try (truncated)
var myValue1 = await JSRuntime.InvokeAsync<string>("sessionStorage.getItem", dataKey);
我第一次尝试从会话存储中读取该项时如下所示:

@inject IJSRuntime JSRuntime
// Initial try (truncated)
var myValue1 = await JSRuntime.InvokeAsync<string>("sessionStorage.getItem", dataKey);
//初始尝试(截断)
var myValue1=await JSRuntime.InvokeAsync(“sessionStorage.getItem”,dataKey);
在做了一些搜索之后,我发现建议不要在webassembly中等待,所以我将其更改为:

// Remove the await (still truncated)
var myValue2 = ((IJSInProcessRuntime)JSRuntime).Invoke<string>("sessionStorage.getItem", dataKey);
//删除等待(仍被截断)
var myValue2=((IJSInProcessRuntime)JSRuntime).Invoke(“sessionStorage.getItem”,dataKey);
这给了我一个相同的结果,一个正好1000字节的截断字符串

在做了更多的阅读之后,我发现有人建议在某些情况下使用无应答呼叫。我试过了,但结果是空的。我找不到这个用例的清晰示例,因此我的代码可能不正确

// Unmarshalled (null)
var myValue3 = ((IJSUnmarshalledRuntime)JSRuntime).InvokeUnmarshalled<string, object>("sessionStorage.getItem", dataKey);
//解组(空)
var myValue3=((IJSUnmarshalledRuntime)JSRuntime).InvokeUnmarshalled(“sessionStorage.getItem”,dataKey);
经过广泛的搜索,我找不到任何其他建议。有人能帮我从会话存储中读取这个字符串吗


谢谢

我创建了一个页面,在该页面上初始化一个随机值,然后将其写入会话存储。单击按钮时,将读取该值并与预期值进行比较。显示结果,结果为真。我已经在各种浏览器中进行了测试

然而,这里有一种特殊的行为。如果您在visual studio中使用调试器(未在vs代码中测试,但假设它们的行为相同),您将只看到1000个字符,即使字符串中有更多字符。在本例中,只需注释
标记,即可看到显示10000个字符,但调试器仅显示1000个字符


@page "/sessionStorage"
@inject IJSRuntime js

<h1>SessionStorage</h1>

@if (isSame.HasValue == true)
{
  @*<p>@_expectedSessionValue</p>*@
    <p>Result: @isSame</p>
}

<button class="btn btn-primary" @onclick="ReadSessionStorage">Click me</button>

@code {
    private Boolean? isSame = null;

    private String _expectedSessionValue = "";
    private String _sessionKey = "key1";


    protected async override Task OnInitializedAsync()
    {
        Random random = new Random(12345);

        Char[] content = new char[10000];
        for (int i = 0; i < content.Length; i++)
        {
            content[i] = (Char)('a' + random.Next(0, 26));
        }

        _expectedSessionValue = new string(content);

        await js.InvokeVoidAsync("sessionStorage.setItem", new[] { _sessionKey, _expectedSessionValue });

        base.OnInitialized();
    }

    protected async Task ReadSessionStorage()
    {
        await base.OnParametersSetAsync();

        String value = await js.InvokeAsync<String>("sessionStorage.getItem", new[] { _sessionKey });

        isSame = value == _expectedSessionValue;
        StateHasChanged();
    }

}



@第页“/会话存储”
@注入IJSRuntime js
会话存储
@if(isname.HasValue==true)
{
@* @_expectedSessionValue

*@ 结果:@isSame

} 点击我 @代码{ 私有布尔值?IsName=null; 私有字符串_expectedSessionValue=“”; 私有字符串_sessionKey=“key1”; 受保护的异步重写任务OnInitializedAsync() { 随机数=新随机数(12345); 字符[]内容=新字符[10000]; for(int i=0;i
非常感谢您!我正在使用调试器,所以这很有意义。我把文本打印到屏幕上,这就是我要找的全文。我以前从未在调试器上遇到过这个问题,但这肯定是我将来要记住的事情!再次感谢,我在这件事上浪费了太多时间!不客气,这是一个非常有趣的问题。在初稿中,我写了一些类似于“我无法复制您的bug”的内容,但随后我在调试器中观看并发现了它。:)