appel webapi de mvc contrôleur et l'utilisation même httpclient
Je vais avoir MVC5 projet, de contrôleur besoin d'appeler le webapi méthode. Webapi mis en œuvre par le jeton d'authentification.donc, je dois passer le jeton pour chaque appel. Je suis à l'aide de code ci-dessous pour passer le jeton dans httpheader.
HttpClient httpClient = new HttpClient();
string baseUrl = "http://localhost:60477/";
dynamic token = Session["token"];
if (token.AccessToken != null)
{
httpClient.DefaultRequestHeaders.Add("Authorization", String.Format("Bearer {0}", token.AccessToken));
}
Je vais avoir plusieurs méthodes d'action dans mon contrôleur comme, je veux utiliser une seule httpclient et les en-têtes doivent être ajoutés dans un seul endroit, plutôt que l'ajout d'en-tête dans chaque et chaque méthode d'action. Où je peux placer httpclient les en-têtes de code d'enregistrement dans mvc applictaion commun à tous les contrôleurs. Cela signifie que je ne veux pas répéter le code comme l'ajout d'un jeton dans chaque et chaque méthode d'action. comment puis-je le faire
Public ActionResult Postuser(UserModel user)
{
//post code
}
Public ActionResult getuser(UserModel user)
{
HttpResponseMessage response = httpClient.GetAsync(baseUrl + "api/Admin/GetStates").Result;
if (response.IsSuccessStatusCode)
{
string stateInfo = response.Content.ReadAsStringAsync().Result;
}
}
Public ActionResult PostRoles(RoleModel role)
{
//post roles code
}
OriginalL'auteur SivaRajini | 2016-05-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer de créer une petite classe d'aide pour la création de votre
httpclient
objet. Quelque chose commeet ensuite l'appeler dans votre contrôleurs
OriginalL'auteur Dandy
Il est préférable de respecter le Principe de Responsabilité Unique et de l'extrait de l'interaction avec un autre service dans un il est de la même classe, par exemple
Alors vous injecter le IServiceClient dans votre contrôleur et appel de méthodes. Si vous n'utilisez pas d'injection (que je vous conseille de le faire), vous pouvez simplement créer une nouvelle instance dans le constructeur du contrôleur.
OriginalL'auteur Ilya Chernomordik
Vous pouvez essayer d'utiliser un filtre d'actions dans votre contrôleur. Essayez d'ajouter un remplacement qui ressemble à quelque chose comme cela-
La OnActionExecuting méthode est au contrôleur de champ d'application, donc vous pouvez avoir une logique différente pour les différents contrôleurs.
Il y a aussi un OnActionExecuted méthode remplacer si vous voulez exécuter du code après votre méthode d'action.
------ modifier--------------
Aussi loin que l'endroit où placer votre HttpClient extrait de code, vous pouvez essayer ce-
Donc l'objet HttpClient ainsi que la cession de votre baseUrl est établi dans OnActionExecuting. Ce code sera exécuté avant toute méthode retournant une ActionResult dans le controller vous sont refactoring. Si vous souhaitez cibler certains et pas toutes les méthodes, voir le premier exemple de OnActionExecuting ci-dessus.
Maintenant votre méthode getuser a un paramètre supplémentaire ( HttpClient HttpClient ).
Voir l'edit de mon post. Aussi, l'injection d'un service comme Ilya Chernomordik proposé est idéal ainsi que Danny suggère d'utiliser des méthodes d'assistance. Ma suggestion: peut-être pas le meilleur, mais si vous voulez la richesse de l'eau de l'action du filtre de lui donner un essai. Le HttpClient paramètre ajouté à vos méthodes pourrait être remaniée dans un objet de service pour l'injection avec le code dans la OnActionExecuting remplacer la méthode déplacé dans l'objet du service. Espérons que ça aide!
OriginalL'auteur alphaneer
pourquoi ne pas vous déplacer le code Mondial asax ou créer des Attribut?
voici un bon lien:
http://www.diaryofaninja.com/blog/2011/07/24/writing-your-own-custom-aspnet-mvc-authorize-attributes
OriginalL'auteur Petar Minev