Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Observação
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 10 deste artigo.
Advertência
Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e do .NET Core. Para a versão atual, consulte a versão .NET 10 deste artigo.
Este artigo fornece orientações para resolução de problemas para Blazor formulários.
Cargas úteis de grande volume e o limite de tamanho de mensagem SignalR
Esta secção aplica-se apenas a Blazor Web Apps, Blazor Server aplicações e soluções alojadas Blazor WebAssembly que implementam SignalR.
Se o processamento de formulários falhar porque a carga útil do formulário do componente excedeu o tamanho máximo permitido para a mensagem de entrada SignalR permitido para métodos hub, o formulário pode adotar interoperabilidade em streaming JS sem aumentar o limite de tamanho da mensagem. Para mais informações sobre o limite de tamanho e o erro apresentado, consulte ASP.NET Core BlazorSignalR guidance.
No exemplo seguinte, uma área de texto (<textarea>) é usada com interoperação de streaming JS para transferir até 50.000 bytes de dados para o servidor.
Adicionar uma função JavaScript (JS) getText à aplicação:
window.getText = (elem) => {
const textValue = elem.value;
const utf8Encoder = new TextEncoder();
const encodedTextValue = utf8Encoder.encode(textValue);
return encodedTextValue;
};
Para informações sobre onde colocar JS numa Blazor aplicação, consulte a localização do JavaScript em ASP.NET Core Blazor apps.
Por considerações de segurança, streams com comprimento zero não são permitidos para o streaming JS Interop. Portanto, o seguinte StreamFormData componente prende a JSException e devolve uma cadeia vazia se a área de texto estiver em branco quando o formulário é submetido.
StreamFormData.razor:
@page "/stream-form-data"
@inject IJSRuntime JS
@inject ILogger<StreamFormData> Logger
<h1>Stream form data with JS interop</h1>
<EditForm FormName="StreamFormData" Model="this" OnSubmit="Submit">
<div>
<label>
<textarea> value streamed for assignment to
<code>TextAreaValue (<= 50,000 characters)</code>:
<textarea @ref="largeTextArea" />
</label>
</div>
<div>
<button type="submit">Submit</button>
</div>
</EditForm>
<div>
Length: @TextAreaValue?.Length
</div>
@code {
private ElementReference largeTextArea;
public string? TextAreaValue { get; set; }
protected override void OnInitialized() =>
TextAreaValue ??= string.Empty;
private async Task Submit()
{
TextAreaValue = await GetTextAsync();
Logger.LogInformation("TextAreaValue length: {Length}",
TextAreaValue.Length);
}
public async Task<string> GetTextAsync()
{
try
{
var streamRef =
await JS.InvokeAsync<IJSStreamReference>("getText", largeTextArea);
var stream = await streamRef.OpenReadStreamAsync(maxAllowedSize: 50_000);
var streamReader = new StreamReader(stream);
return await streamReader.ReadToEndAsync();
}
catch (JSException jsException)
{
if (jsException.InnerException is
ArgumentOutOfRangeException outOfRangeException &&
outOfRangeException.ActualValue is not null &&
outOfRangeException.ActualValue is long actualLength &&
actualLength == 0)
{
return string.Empty;
}
throw;
}
}
}
@page "/stream-form-data"
@inject IJSRuntime JS
@inject ILogger<StreamFormData> Logger
<h1>Stream form data with JS interop</h1>
<EditForm Model="this" OnSubmit="Submit">
<div>
<label>
<textarea> value streamed for assignment to
<code>TextAreaValue (<= 50,000 characters)</code>:
<textarea @ref="largeTextArea" />
</label>
</div>
<div>
<button type="submit">Submit</button>
</div>
</EditForm>
<div>
Length: @TextAreaValue?.Length
</div>
@code {
private ElementReference largeTextArea;
public string? TextAreaValue { get; set; }
protected override void OnInitialized() =>
TextAreaValue ??= string.Empty;
private async Task Submit()
{
TextAreaValue = await GetTextAsync();
Logger.LogInformation("TextAreaValue length: {Length}",
TextAreaValue.Length);
}
public async Task<string> GetTextAsync()
{
try
{
var streamRef =
await JS.InvokeAsync<IJSStreamReference>("getText", largeTextArea);
var stream = await streamRef.OpenReadStreamAsync(maxAllowedSize: 50_000);
var streamReader = new StreamReader(stream);
return await streamReader.ReadToEndAsync();
}
catch (JSException jsException)
{
if (jsException.InnerException is
ArgumentOutOfRangeException outOfRangeException &&
outOfRangeException.ActualValue is not null &&
outOfRangeException.ActualValue is long actualLength &&
actualLength == 0)
{
return string.Empty;
}
throw;
}
}
}
Se o processamento do formulário falhar devido à carga do formulário do componente ter excedido o limite máximo de tamanho de mensagem de entrada permitido para métodos de hub, o limite de tamanho da mensagem pode ser aumentado. Para mais informações sobre o limite de tamanho e o erro apresentado, consulte ASP.NET Core BlazorSignalR guidance.
Erro do parâmetro EditForm
InvalidOperationException: EditForm requer um parâmetro Model ou um parâmetro EditContext, mas não ambos.
Confirme que o EditForm atribui um Modelou um EditContext. Não uses ambos para a mesma forma.
Ao atribuir a Model, confirme que o tipo de modelo está instanciado.
Ligação desligada
Erro: Conexão desconectada com o erro 'Erro: O servidor retornou um erro ao fechar: Conexão fechada com um erro.'.
System.IO.InvalidDataException: O tamanho máximo da mensagem de 32768B foi excedido. O tamanho da mensagem pode ser configurado em AddHubOptions.
Para mais informações e orientações, consulte os seguintes recursos: