J'ai LoginModel:
public class LoginModel : IData
{
public string Email { get; set; }
public string Password { get; set; }
}
et j'ai la méthode de l'API Web
public IHttpActionResult Login([FromBody] LoginModel model)
{
return this.Ok(model);
}
Et c'est le retour 200 et le corps:
{
Email: "dfdf",
Password: "dsfsdf"
}
Mais je veux obtenir avec la première lettre inférieure dans une propriété comme
{
email: "dfdf",
password: "dsfsdf"
}
Et j'ai résolveur de contrat Json pour corriger
public class FirstLowerContractResolver : DefaultContractResolver
{
protected override string ResolvePropertyName(string propertyName)
{
if (string.IsNullOrWhiteSpace(propertyName))
return string.Empty;
return $"{char.ToLower(propertyName[0])}{propertyName.Substring(1)}";
}
}
Comment puis-je l'appliquer?
Pour forcer toutes les données json renvoyées de l'api au boîtier camel, il est plus facile d'utiliser Newtonsoft Json avec le résolveur de contrat par défaut du boîtier camel.
Créez une classe comme celle-ci:
using Newtonsoft.Json.Serialization;
internal class JsonContentNegotiator : IContentNegotiator
{
private readonly JsonMediaTypeFormatter _jsonFormatter;
public JsonContentNegotiator(JsonMediaTypeFormatter formatter)
{
_jsonFormatter = formatter;
_jsonFormatter.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver();
}
public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
{
return new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));
}
}
et définissez-le lors de la configuration de l'API (au démarrage):
var jsonFormatter = new JsonMediaTypeFormatter();
httpConfiguration.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
Si vous utilisez Newtonsoft.Json, vous pouvez ajouter JsonProperties à votre modèle de vue:
public class LoginModel : IData
{
[JsonProperty(PropertyName = "email")]
public string Email {get;set;}
[JsonProperty(PropertyName = "password")]
public string Password {get;set;}
}
Vous pouvez ajouter les deux instructions suivantes dans la configuration de l'API Web ou dans le fichier de démarrage
using Newtonsoft.Json; using Newtonsoft.Json.Serialization; GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver (); [.____. .Configuration.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented;
Mais il est très important d'utiliser la méthode return Ok()
au lieu de return Json()
ou cela ne fonctionnera pas.