Asp.Net WebApi Héritage avec un BaseController
Je suis actuellement des difficultés pour obtenir l'héritage WebApi de travail comme je le voudrais.
Peut-être que vous pouvez me pointer dans la bonne direction?
Mon but est d'avoir un générique WebApi projet, qui peut être réutilisée dans plusieurs autres WebApi projets.
Par exemple: j'ai une réutilisables UserController qui peut gérer la connexion à plusieurs Sites web. Maintenant, je créer un nouveau Site web simple et ajouter le UserController pour le projet nouvellement créé, qui fonctionne simplement.
Mais maintenant l'exigence pour le nouveau Site web et j'ai besoin de surcharger le UserController méthodes pour tenir compte de ces changements, sans modifier le contrôleur générique.
Ce que je veux atteindre peut être vu dans l'extrait de code suivant (bien sûr, cela ne compile pas car C# se plaint pas de méthode adéquate pour la surcharge trouvé.)
//This belongs to solution "GenericWebApi"
public class LoginRequest
{
public string User { get; set; }
}
public class BaseApiController : ApiController
{
[Route("login")]
public virtual HttpResponseMessage Login(LoginRequest request)
{
return new HttpResponseMessage();
}
}
//This belongs to solution "CarWebsite"
public class CarWebsiteLoginRequest : LoginRequest
{
public string Car { get; set; }
}
[RoutePrefix("api/users")]
public class CarWebsiteApiController : BaseApiController
{
public override HttpResponseMessage Login(CarWebsiteLoginRequest request)
{
//Do some car specific login stuff
return base.Login(request);
}
}
Une solution que j'ai trouvé de travail a été de remplacer le "LoginRequest" et "CarWebsiteLoginRequest" avec "dynamique", mais qui se sent tout simplement mauvais, et le ModelBinder de cours ne sera pas fonctionner comme prévu.
Des idées comment vous résoudre ce problème?
Merci d'avance
OriginalL'auteur coalmee | 2015-01-15
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire votre
BaseApiController
générique:Et faire de votre
CarWebsiteApiController
utilisationCarWebsiteLoginRequest
comme un paramètre générique:OriginalL'auteur Sergey Kolodiy
Si vous sortez de la variable et de le lire à l'intérieur de la méthode, il est plus facile de surcharge
En supposant que vous êtes la lecture/envoi JSON
Ce petit exemple montre comment surcharger la base de l'appel, refactoriser comme nécessaires à l'optimisation. Un médicament générique code doit être placé dans une méthode protégée. J'ai édité pour le prouver.
Je veux aller plus dans le sens de @Sergey approche, de faire usage de la ModelBinder etc. Votre solution ne me laisse pas utiliser le WebApi caractéristiques comme ils ont l'intention d'utiliser (plugable sérialiseurs, la validation du modèle, etc.)
OriginalL'auteur Brian from state farm