es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ASP.NET Core 6.0: Eliminación en la base de datos con jQuery.ajax resulta en un ERROR HTTP 400 POST.

Empecé a aprender ASP.NET Core 6.0 hace una semana. He creado un chat en tiempo real con SignalR, también estoy guardando los mensajes en mi base de datos.

Por el momento, es solo una tabla; cada fila contiene en columnas separadas el nombre de usuario, el mensaje y un botón de eliminar. Estoy agregando las nuevas filas a medida que llegan nuevos mensajes.

El problema es que mi botón de eliminar no funciona.

En la consola, estoy obteniendo un mensaje de error: POST https://localhost:7122/Chat/DeleteMessage/1 400.

El botón:

<input type="button" onclick="Delete(@obj.Id)" value="Eliminar">

El script:

<script>
function Delete(id) {
    $.ajax({
        url: "/Chat/DeleteMessage/" + id,
        type: "POST",
    })
}
</script>

Y el controlador:

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult DeleteMessage(int id)
{
    db.Chat.Remove(db.Chat.Find(id));
    db.SaveChanges();
    return RedirectToAction("Index");
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    El problema con el botón de eliminación que no funciona puede deberse a la falta de un token contra falsificación en la solicitud de Ajax. Para solucionarlo, podemos agregar el token contra falsificación a los encabezados de la solicitud.

    Modifique la solicitud de Ajax de la siguiente manera:

    function Delete(id) {
        $.ajax({
            url: "/Chat/DeleteMessage/" + id,
            type: "POST",
            headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
            success: function (response) {
                // manejar éxito
            },
            error: function () {
                // manejar error
            }
        });
    }
    

    Además, asegúrese de agregar el token contra falsificación a su formulario incluyendo el siguiente código en su HTML:

    <form>
        @Html.AntiForgeryToken()
        ...
    </form>
    

    Esto debería resolver el problema con el botón de eliminación que no funciona.

Comments are closed.