¿Por qué no se necesita un modificador de FromBody para parámetros posteriores?

jQuery llamando a un controlador mvc a través de correo ajax. Esto funciona, pero ¿por qué el segundo parámetro no requiere el modificador [DeBody] también?

en relación con el tema Lista es una variedad de entrada y facturación El estado es una String.

j Query

$.ajax({
        url: '@Url.Action("UpdateBillingLines", "BillingExceptions")',
        data: {
            lines: itemList,
            statusTo: billingStatus
        },
        type: 'POST',
        async: false,
        success: function (data) {
            //test
        },
        error: function (xhr, txtStatus, err) {
            alert(txtStatus);
        }
 });

controlador

[System.Web.Http.HttpPost]
public ActionResult UpdateBillingLines([FromBody] List lines, string statusTo)
{
    string result = "";
    // logic here
    return Json(result, JsonRequestBehavior.AllowGet);
}

Pregunta hecha hace 3 años, 4 meses, 27 días - Por codecrusaderx


3 Respuestas:

  • No es que sea no necesario (como lo pones). Es eso. No puedo ser utilizado para parámetros posteriores. El documentación explica por qué:

    En la mayoría de un parámetro se permite leer del cuerpo del mensaje... La razón de esta regla es que el cuerpo de solicitud puede ser almacenado en un flujo no amortiguado que sólo se puede leer una vez

    Respondida el Dec 18, 2020 a las 18:25 - por binaryblossom

    Votos positivos: 0 | Votos negativos: 0

  • En el código que proporcionaste, el motivo por el cual el segundo parámetro statusTo no requiere el modificador [FromBody] es porque statusTo es un parámetro simple de tipo string, no es un tipo complejo que necesita ser extraído del cuerpo de la solicitud HTTP.

    Cuando se utiliza [FromBody] en un parámetro de un método de un controlador en ASP.NET MVC, es para indicar al sistema que el valor de ese parámetro debe ser extraído del cuerpo de la solicitud HTTP en lugar de la URL, en el caso de tipos complejos como listas, objetos JSON, etc.

    En el caso de statusTo, al ser un parámetro simple de tipo string, el sistema de ASP.NET MVC sabe cómo manejarlo y extraerlo de la solicitud sin necesidad de usar [FromBody].

    En resumen, no se necesita un modificador [FromBody] para parámetros simples como string, int, bool, etc. Solo se necesita para tipos complejos que necesitan ser extraídos del cuerpo de la solicitud HTTP.

    Respondida el Dec 19, 2020 a las 18:28 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El modificador [FromBody] solo es necesario para el primer parámetro porque es el que contiene el cuerpo de la petición HTTP. El segundo parámetro, statusTo, se pasa como una cadena de consulta en la URL, por lo que no es necesario utilizar el modificador [FromBody].

    En resumen, el modificador [FromBody] se utiliza para indicar que el parámetro debe vincularse al cuerpo de la petición HTTP, que suele ser un objeto JSON. Sin embargo, en este caso, solo el primer parámetro contiene el cuerpo de la petición, por lo que solo necesita el modificador [FromBody].

    Respondida el Dec 19, 2020 a las 18:34 - por Gemini

    Votos positivos: 0 | Votos negativos: 0