Je voudrais créer un service de connexion démo dans l'API web et j'ai besoin de mettre un cookie sur la réponse. Comment je fais ça? Ou y a-t-il une meilleure façon de faire une autorisation?Comment définir un cookie de réponse sur HttpReponseMessage?
Répondre
Ajouter une référence à System.Net.Http.Formatting.dll
et utiliser la méthode d'extension AddCookies
définie dans la classe HttpResponseHeadersExtensions
.
Voici a blog post describing this approach, et le MSDN topic.
Si cette assemblée n'est pas une option pour vous, voici ma plus réponse d'avant c'était une option:
ancien réponse suit
Je préfère une approche qui reste dans le domaine de HttpResponseMessage
sans saignement dans le HttpContext qui est pas testable et ne sont pas toujours applicables en fonction de l'hôte:
/// <summary>
/// Adds a Set-Cookie HTTP header for the specified cookie.
/// WARNING: support for cookie properties is currently VERY LIMITED.
/// </summary>
internal static void SetCookie(this HttpResponseHeaders headers, Cookie cookie) {
Requires.NotNull(headers, "headers");
Requires.NotNull(cookie, "cookie");
var cookieBuilder = new StringBuilder(HttpUtility.UrlEncode(cookie.Name) + "=" + HttpUtility.UrlEncode(cookie.Value));
if (cookie.HttpOnly) {
cookieBuilder.Append("; HttpOnly");
}
if (cookie.Secure) {
cookieBuilder.Append("; Secure");
}
headers.Add("Set-Cookie", cookieBuilder.ToString());
}
Ensuite, vous pouvez inclure un cookie dans la réponse comme ceci:
HttpResponseMessage response;
response.Headers.SetCookie(new Cookie("name", "value"));
Je suis d'accord, cette ressemble à une meilleure alternative. Changé les réponses acceptées pour guider les utilisateurs dans le futur. –
Est-il possible que ce ne soit plus une réponse? La seule façon que j'ai trouvé cette DLL est à travers Nuget et il indique explicitement que c'est pour WebApi.Client supérieur à 2.0 et inférieur à 2.1, donc cette réponse était pour WebApi 2. Nous sommes maintenant avec ASP.NET 4 et je ne trouve plus cette DLL. –
@IsaacLlopis Je suppose qu'ils l'ont déplacé de l'extension dll au noyau. –
Vous pouvez ajouter le cookie à la collection HttpContext.Current.Response.Cookies.
var cookie = new HttpCookie("MyCookie", DateTime.Now.ToLongTimeString());
HttpContext.Current.Response.Cookies.Add(cookie);
Merci, exactement ce que je voulais et aurait dû penser à moi-même. Mais attendu que cela soit disponible sur le 'HttpResponseMessage'. –
C'était aussi ma première estimation, mais pour une raison quelconque, ce n'est pas le cas. Cela aurait certainement été mieux pour la capacité de test. – Maurice
Cette réponse va à l'encontre de la façon dont WebAPI devrait être utilisé. Vous ne devriez pas référencer HttpContext.Current à partir de WebAPI car cela n'existe pas si vous êtes un hôte indépendant. Les bits bêta manquaient de charges d'utilitaires auxiliaires comme celui-ci. Le RC a ajouté une méthode d'extension AddCookies() à HttpResponseMessage.Headers que vous devriez utiliser à la place. – Andrew
- 1. Définir un cookie dans Laravel 5+ sans réponse
- 2. Comment puis-je définir un cookie tiers
- 3. comment définir la date d'expiration sur un cookie dans cfscript
- 4. comment puis-je définir un cookie global?
- 5. PHP: impossible de définir un cookie
- 6. Définir un cookie de navigateur pour l'élément
- 7. BlazeDS Définir manuellement Cookie
- 8. Comment définir cookie demande PHP cURL
- 9. Laravel 4 Réponse JSON avec cookie
- 10. Comment lire la valeur de cookie en réponse dans angularjs?
- 11. Définir un cookie pour ne jamais expirer
- 12. Comment définir un cookie pour une demande de savon?
- 13. Comment définir un cookie avec un composant middleware (ruby) rack?
- 14. Comment définir un cookie dans un Rack :: MockRequest?
- 15. jQuery: Définir un cookie pour deux domaines
- 16. comment créer un cookie .ASPXAUTH sur python
- 17. Erreur de cookie C# par réponse
- 18. Est-il possible de définir un cookie via Jersey AsyncResponse
- 19. Définir un cookie pour un webView dans Android
- 20. Comment définir Cookie sécurisé sur les applications WSGI en python
- 21. Comment supprimer un cookie
- 22. Définir un cookie dans différents dossiers
- 23. Cookie sur un domaine intranet
- 24. Définir le domaine sur le cookie de session ASP
- 25. Comment persister un cookie?
- 26. Comment définir un cookie sur jQuery basculer et se souvenir de la position de bascule?
- 27. Comment définir un cookie dans le portlet Liferay?
- 28. Comment définir un cookie pour la grille triable Jquery
- 29. Comment définir un cookie pour une requête web dans Silverlight
- 30. Comment définir le cookie HttpOnly dans Django?
Il ne semble pas que vous pouvez définir un cookie sur HttpResponseMessage. Jetez un oeil à ce fil, peut-être il aidera http://stackoverflow.com/questions/5463431/setting-cookies-within-a-wcf-service –