Nas páginas ASP.NET Core Razor, um token antifalsificação é adicionado automaticamente a um formulário:
A geração automática de tokens antifalsificação para elementos de formulário HTML ocorre quando a tag contém o atributo method="post" e uma das seguintes afirmações é verdadeira:
- O atributo action está vazio (action="").
- O atributo action não é fornecido ().
Estou tão acostumado com esse comportamento automático que, quando um formulário tem uma ação, esqueço de adicionar manualmente um token e, claro, o POST falhará com 400 (e perderei muito tempo depurando).
Qual é o motivo desse comportamento - por que o token não é adicionado quando há uma ação?
Além disso, existe alguma maneira durante o desenvolvimento de registrar erros mais informativos do que POST '/somepage' responded '400'
quando ocorre um erro antifalsificação? Eu tropecei nessa pegadinha várias vezes, então me pergunto se posso evitá-la no futuro.
Quando você define valores para o atributo
asp-*
(page
,action
etc), o auxiliar de tag usa o sistema de roteamento para gerar um valor para oaction
atributo que é garantido como um ponto final local. Se você definir oaction
atributo manualmente, ele poderá apontar para outro site e o campo csrf não terá sentido, portanto, não há sentido em renderizá-lo.Do código-fonte ( https://github.com/dotnet/aspnetcore/blob/main/src/Mvc/Mvc.TagHelpers/src/FormTagHelper.cs )
Então a solução é usar os
asp-
atributos para definir a ação.