Se validan los métodos TryParse y BindAsync
ASP.NET Core ahora valida los métodos TryParse
y BindAsync
en los tipos de parámetro para los métodos Map*
. Si no se encuentra ningún método válido, ASP.NET Core busca métodos no válidos y genera una excepción en el inicio si encuentra uno. La excepción ayuda a evitar un comportamiento inesperado al alertar de que puede que la firma del método sea incorrecta.
Versión introducida
ASP.NET Core 6.0 RC 2
Comportamiento anterior
En versiones anteriores de ASP.NET Core 6, si un método TryParse
o BindAsync
tenía una firma no válida, no se producía ninguna excepción y el marco intentaba enlazar JSON desde el cuerpo.
// 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;
}
Comportamiento nuevo
Si ASP.NET Core encuentra un método TryParse
o BindAsync
público que no coincide con la sintaxis esperada, se genera una excepción en el inicio. En el ejemplo anterior, se genera un error similar al siguiente:
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 cambio importante
Este cambio puede afectar a la compatibilidad binaria y a la compatibilidad de orígenes.
Motivo del cambio
Este cambio se ha realizado para que los desarrolladores tengan conocimiento de los métodos BindAsync
y TryParse
que tienen un formato no válido. Anteriormente, el marco suponía que el parámetro es JSON a partir del cuerpo. Dicha suposición puede dar como resultado un comportamiento inesperado.
Acción recomendada
Si el tipo tiene un método BindAsync
o TryParse
con una sintaxis diferente por un motivo distinto del enlace de parámetros, ahora encontrará una excepción en el inicio. Para evitar este comportamiento, hay varias estrategias disponibles:
- Cambie el método
BindAsync
oTryParse
para que seainternal
oprivate
. - Agregue un nuevo método
BindAsync
oTryParse
que tenga la sintaxis que busca el marco—los métodos no válidos se ignorarán si se encuentra uno válido. - Marque el parámetro como
[FromBody]
.
API afectadas
RequestDelegateFactory.Create()
- Todos los métodos
IEndpointRouteBuilder.Map*()
, por ejemplo,app.MapGet()
yapp.MapPost()
.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de