asp.net-mvc-4 - the - web api get parameters
ASP.Net Web Api no vinculante modelo en POST (3)
Estoy intentando transferir datos JSON a un método Web Api, pero los datos JSON no son vinculantes para el modelo.
Aquí está mi modelo:
[DataContract]
public class RegisterDataModel
{
[DataMember(IsRequired = true)]
public String SiteKey { get; set; }
[DataMember(IsRequired = true)]
public String UserId { get; set; }
[DataMember(IsRequired = true)]
public String UserName { get; set; }
}
Aquí está mi acción Web Api:
public class RegisterController : ApiController
{
public Guid Post([ModelBinder] RegisterDataModel registerDataModel)
{
if (!ModelState.IsValid)
{
throw new ModelStateApiException(ModelState);
}
var userProfileDataContract = userProfileBusinessLibrary.GetNewOne();
userProfileDataContract.UserId = registerDataModel.UserId;
userProfileDataContract.UserName = registerDataModel.UserName;
var userKey = userProfileBusinessLibrary.Register(registerDataModel.SiteKey, userProfileDataContract);
return userKey;
}
}
Antes de agregar [ModelBinder], registerDataModel era nulo. Después de agregar [ModelBinder], registerDataModel es una instancia de RegisterDataModel, pero todos los valores de las propiedades son nulos.
Aquí está mi Solicitud a través de Fiddler:
http://local.testwebsite.com/api/register
Request Headers:
User-Agent: Fiddler
Host: local.testwebsite.com
Content-Length: 89
Content-Type: application/json; charset=utf-8:
Request Body:
{
"SiteKey":"qwerty",
"UserId": "12345qwerty",
"UserName":"john q"
}
¿Qué me falta para que mis datos de publicación se vinculen a las propiedades de RegisterDataModel? Gracias por tu ayuda.
¿Cómo está creando la solicitud JSON? ¿A través del creador de solicitudes de Fiddler? Pruebe solo lo siguiente en el cuerpo de la solicitud.
{
"SiteKey":"qwerty",
"UserId": "12345qwerty",
"UserName":"john q"
}
Supongo que ''Request Body'' también es parte de su cuerpo de solicitud. Eliminar eso y comprobar.
En mi caso, las solicitudes de la aplicación se pasan a través de un middleware llamado "API Manager" para autenticación / autorización antes de reenviar a mi .NET Web API. El parámetro POST no está enlazado porque, por alguna razón no tengo idea de por qué, el "Content-Length" se emite desde los encabezados. La razón es porque el valor predeterminado JsonMediaTypeFormatter siempre comprueba las solicitudes ''Content-Length'' antes de realizar el enlace del modelo. y si no se presenta Content-Length, establecerá el parámetro en NULL.
No relacionado con el problema del OP, pero el título de la pregunta me llevó aquí cuando utilicé campos (públicos) en lugar de propiedades en la clase Model (es decir, no {get; set;}
). Resultó que esto también causa que el enlace falle.
Quizás ayude a alguien.