89 votes

Comment convertir un HttpRequestBase en un objet HttpRequest ?

Dans mon contrôleur ASP.NET MVC, j'ai une méthode qui requiert un nom d'utilisateur et un mot de passe. HttpRequest objet. Tout ce à quoi j'ai accès est un HttpRequestBase objet.

Y a-t-il un moyen de convertir cela ?

Que puis-je/doit-on faire ?

5 votes

Note : Le "contraire" de cette question se trouve ici. stackoverflow.com/questions/15275370/

73voto

CountZero Points 789

Vous devriez toujours utiliser HttpRequestBase et HttpResponseBase dans votre application, par opposition aux versions concrètes qui sont impossibles à tester (sans typemock ou autre magie).

Il suffit d'utiliser le HttpRequestWrapper à convertir comme indiqué ci-dessous.

var httpRequestBase = new HttpRequestWrapper(Context.Request);

3 votes

Une autre note que, non seulement utiliser HttpRequestBase y HttpResponseBase également HttpContextBase . :)

0 votes

C'est se convertir dans la mauvaise direction. La question était : si je ont a HttpRequestBase comment puis-je obtenir une réalité HttpRequest d'elle ?

51voto

Kevin Hakanson Points 15498

C'est votre méthode, donc vous pouvez la réécrire pour prendre HttpRequestBase ? Si ce n'est pas le cas, vous pouvez toujours obtenir le HttpRequest de HttpContext.Current.HttpRequest à transmettre. Cependant, j'enveloppe souvent l'accès au HttpContext à l'intérieur d'une classe comme celle mentionnée dans l'exemple suivant ASP.NET : Suppression des dépendances System.Web pour une meilleure prise en charge des tests unitaires.

4 votes

C'est embarrassant, j'ai aussi pensé à ça et ça ne marche pas. Le HttpContext est le contexte MVC ... donc il n'y a pas de propriété 'Current' exposée sur lui. Je ne sais pas comment accéder à la 'vieille école' HttpContext.Current ... ? ???

48 votes

Pour être sûr que vous saisissez la classe HttpContext au lieu du membre du contrôleur, essayez d'utiliser System.Web.HttpContext.Current.

1 votes

J'avais besoin d'utiliser l'espace de noms complet parce qu'il prenait la propriété actuelle de l'espace de noms MVC. merci. Note aux autres : ne faites pas ce que je fais. C'est un VeryBadThing(tm).

32voto

adamgede Points 548

Vous pouvez simplement utiliser

System.Web.HttpContext.Current.Request

La clé ici est que vous avez besoin de l'espace de nom complet pour obtenir le "bon" HttpContext.

Je sais que cela fait 4 ans que cette question a été posée, mais si cela peut aider quelqu'un, alors voilà !

(Edit : Je vois que Kevin Hakanson a déjà donné cette réponse...donc j'espère que ma réponse aidera les personnes qui ne lisent que les réponses et non les commentaires). :)

9voto

Klaas Points 91

Essayez d'utiliser/créer un HttpRequestWrapper en utilisant votre HttpRequestBase.

4voto

Tomas Lycken Points 23432

En général, lorsque vous avez besoin d'accéder au HttpContext dans une action de contrôleur, il y a quelque chose que vous pouvez faire mieux au niveau de la conception.

Par exemple, si vous devez accéder à l'utilisateur actuel, donnez à votre méthode d'action un paramètre de type IPrincipal que vous remplissez avec un Attribute et de simuler comme vous le souhaitez lors des tests. Pour un petit exemple, voir cet article de blog et notamment le point 7.

0 votes

Je suis tout à fait d'accord ! Le problème, c'est que je ne peux pas modifier la bibliothèque de classes actuelle que nous devons utiliser donc cela ne m'aide pas beaucoup :(

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X