Changer le nom du paramètre de l'Api Web de la liaison de modèle
Je suis à l'aide de l'API Web de la liaison de modèle pour analyser les paramètres de la requête à partir d'une URL. Par exemple, voici un modèle de classe:
public class QueryParameters
{
[Required]
public string Cap { get; set; }
[Required]
public string Id { get; set; }
}
Cela fonctionne très bien quand je l'appelle quelque chose comme /api/values/5?cap=somecap&id=1
.
Est-il une manière que je peux changer le nom de la propriété dans la classe du modèle, mais de garder la requête de paramètre nom de la même - par exemple:
public class QueryParameters
{
[Required]
public string Capability { get; set; }
[Required]
public string Id { get; set; }
}
J'ai pensé à l'ajout de [Display(Name="cap")]
à la Capability
de la propriété, mais il ne le fait pas. Est-il un type d'annotation de données que je devrais utiliser?
Le contrôleur est une méthode qui ressemblait à ceci:
public IHttpActionResult GetValue([FromUri]QueryParameters param)
{
//Do Something with param.Cap and param.id
}
OriginalL'auteur user1763965 | 2014-10-28
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la propriété Name de la FromUri de liaison de l'attribut à utiliser les paramètres de chaîne de requête avec des noms différents pour les arguments de la méthode.
Si vous passez des paramètres simples plutôt que votre
QueryParameters
type, vous pouvez lier les valeurs comme ceci:OriginalL'auteur Paul Taylor
API Web utilise un peu mécanisme différent pour le modèle de liaison de ASP.NET MVC. Il utilise des formateurs pour les données transmises dans le corps et classeurs de modèle pour les données transmises dans la chaîne de requête (comme dans votre cas). Formateurs des attributs de métadonnées tandis que le modèle de liants ne le font pas.
Donc, si vous avez passé votre modèle dans le corps du message plutôt que de la chaîne de requête, vous pouvez annoter vos données comme suit et il devrait fonctionner:
Vous connaissez sans doute déjà. Pour qu'il fonctionne avec des paramètres de chaîne de requête et, par conséquent, le modèle de classeur que vous auriez à utiliser votre propre modèle de classeur qui serait en fait inspecter et d'utiliser DataMember attributs.
Le morceau de code suivant ferait l'affaire (même si c'est loin de la qualité de la production):
Vous devrez également indiquer dans votre méthode de contrôleur que vous souhaitez utiliser ce modèle de classeur:
OriginalL'auteur Sebastian K
J'ai passé plusieurs heures à travailler sur une solution robuste pour le même problème, quand un one-liner fera l'affaire parfaitement:
OriginalL'auteur user2966445
Je viens de croiser et d'une lecture dans ma classe de paramètre de retour de la limite de propriété.
Donc dans votre exemple:
Maintenant dans votre Contrôleur, vous pouvez faire référence à la
Capability
propriété.Bien sûr, si vous utilisez une réflexion sur la
param
objet ou sérialiser lescap
propriété sera inclus. Je ne sais pas pourquoi quelqu'un aurait besoin de le faire qu'avec les paramètres de la requête.OriginalL'auteur pholly