Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
ASP.NET Core agora valida os métodos TryParse
e BindAsync
nos tipos de parâmetro para os métodos Map*
. Se nenhum método válido for encontrado, ASP.NET Core procurará métodos inválidos e gerará uma exceção na inicialização se for encontrado. A exceção ajuda a evitar um comportamento inesperado alertando você de que a assinatura do método pode estar incorreta.
Versão introduzida
ASP.NET Core 6.0 RC 2
Comportamento anterior
Nas versões anteriores do ASP.NET Core 6, se um método TryParse
ou BindAsync
tivesse uma assinatura inválida, nenhuma exceção era lançada e a estrutura tentava associar JSON do corpo.
// Todo.TryParse is not in a valid format.
// Will try to bind from body as JSON instead.
app.MapPost("/endpoint", (Todo todo) => todo.Item);
public class Todo
{
public string Item { get; set; }
public static bool TryParse(string value) => true;
}
Novo comportamento
Se ASP.NET Core encontrar um TryParse
ou BindAsync
método público que não corresponda à sintaxe esperada, uma exceção será gerada na inicialização. O exemplo anterior produz um erro semelhante a:
TryParse method found on Todo with incorrect format. Must be a static method with format
bool TryParse(string, IFormatProvider, out Todo)
bool TryParse(string, out Todo)
but found
Boolean TryParse(System.String)
Tipo de mudança disruptiva
Essa alteração pode afetar a compatibilidade binária e a compatibilidade de origem.
Motivo da alteração
Essa alteração foi feita para que os desenvolvedores sejam informados sobre BindAsync
e TryParse
, os métodos que têm um formato inválido. Anteriormente, a estrutura recuava para assumir que o parâmetro é JSON do corpo. Essa suposição pode resultar em um comportamento inesperado.
Ação recomendada
Se o seu tipo tiver um método BindAsync
ou TryParse
com sintaxe diferente por um motivo diferente da associação de parâmetros, agora você encontrará uma exceção na inicialização. Para evitar esse comportamento, há várias estratégias disponíveis:
- Altere seu método
BindAsync
ouTryParse
parainternal
ouprivate
. - Adicione um método novo
BindAsync
ouTryParse
que tenha a sintaxe que a estrutura procura– métodos inválidos serão ignorados se um válido for encontrado. - Marque seu parâmetro como
[FromBody]
.
APIs afetadas
RequestDelegateFactory.Create()
- Todos os
IEndpointRouteBuilder.Map*()
métodos, por exemplo,app.MapGet()
eapp.MapPost()