En option paramètres de chaîne de requête dans ASP.NET Web API
J'ai besoin pour mettre en œuvre les suivantes WebAPI méthode:
/api/books?author=XXX&title=XXX&isbn=XXX&somethingelse=XXX&date=XXX
Tous les paramètres de chaîne de requête peut être null. Qui est, l'appelant peut spécifier de 0 à tous les 5 paramètres.
Dans MVC4 bêta j'ai utilisé pour effectuer les opérations suivantes:
public class BooksController : ApiController
{
//GET /api/books?author=tolk&title=lord&isbn=91&somethingelse=ABC&date=1970-01-01
public string GetFindBooks(string author, string title, string isbn, string somethingelse, DateTime? date)
{
//...
}
}
MVC4 RC ne se comportent pas comme ça. Si je spécifiez moins de 5 paramètres, il répond avec un 404
disant:
Aucune action n'a été trouvé sur le contrôleur "Livres" qui correspond à la demande.
Quelle est la bonne méthode de signature pour qu'elle se comporte comme elle était, sans avoir à spécifier le paramètre facultatif dans le routage d'URL?
- mettre [httpget] sur l'action.
- Si j'ai mis tous les paramètres de la méthode est appelée; en outre, il commence avec
Get
il est automatiquement lié avec leHTTP GET
méthode... - C'est la manière dont le web api travaux de routage, asp.net/web-api/overview/web-api-routing-and-actions/...
- Oui. Je sais comment il fonctionne. Je ne peux pas le faire fonctionner en vertu de CETTE circonstance particulière.
- Comment cette même compiler?
string?
n'est pas un type valide. Vous ne pouvez pas déclarerstring
comme type nullable, car il est un type de référence. - vous avez raison, c'était probablement un rapide résumé de code que j'ai écrit juste dans le but de comprendre pourquoi je n'étais pas en mesure de défaut de
null
. Je me rappelle que le vrai problème était avecDateTime
qui ne pouvaient pas être en défaut jusqu'à ce que la version bêta. Aussi, cette question est à partir de 1 an et demi.
Vous devez vous connecter pour publier un commentaire.
Ce problème a été corrigé dans la diffusion régulière de MVC4.
Maintenant vous pouvez le faire:
et tout va fonctionner hors de la boîte.
null
est considéré comme un expression constante, et donc un valeur par défaut valide.Il est possible de passer plusieurs paramètres, comme modèle unique, comme vijay suggéré. Cela fonctionne pour OBTENIR lorsque vous utilisez le FromUri attribut de paramètre. Cela dit WebAPI pour remplir le modèle de paramètres de requête.
Le résultat est un nettoyeur de contrôleur de l'action avec un seul paramètre. Pour plus d'informations, voir: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
Il prend même en charge de plusieurs paramètres, tant que les propriétés n'entrent pas en conflit.
Mise à jour:
Afin de s'assurer que les valeurs sont en option assurez-vous d'utiliser les types de référence ou nullable (ex. int?) pour les modèles de propriétés.
int Skip
) et il n'ya pas de requête de paramètre pour que la propriété est spécifiée, l'API Contrôleur méthode encore réussi à faire correspondre la demande et de la valeur deSkip
sera juste la valeur par défaut pour ce type, ou 0 dans ce casUtiliser les valeurs par défaut pour tous les paramètres comme ci-dessous
DateTime
n'est pas les valeurs null. J'ai déjà essayé d'utiliserDateTime?
à la place, mais ensuite, MVC n'a pas la carte de la demande à la méthode donnée si j'ai mis uniquement à certains paramètres dans ma requête HTTP.null
de la valeur à un paramètre de typeDateTime
. Peut-être, vous devez la modifier pourDateTime?
, ou utiliser une valeur différente pour un défaut commeDateTime.Now
.Datetime.Now
ne peut pas être utilisé dans les paramètre par défaut de l'initialisation, je corrige la position des mains.si vous souhaitez passer plusieurs paramètres, alors vous pouvez créer de modèle au lieu de passer plusieurs paramètres.
dans le cas où vous ne voulez pas passer n'importe quel paramètre, alors vous pouvez ignorer en tant que bien, et votre code a l'air soigné et propre.
Les valeurs par défaut ne peuvent pas être fournis pour les paramètres qui ne sont pas déclarés"
optional
'Dans votre
WebApiConfig