2012-03-20 4 views
15

मैं वेब एपीआई में डेमो लॉगिन सेवा बनाना चाहता हूं और प्रतिक्रिया पर एक कुकी सेट करने की आवश्यकता है। मैं उसको कैसे करू? या प्राधिकरण करने का कोई बेहतर तरीका है?मैं HttpReponseMessage पर प्रतिक्रिया कुकी कैसे सेट करूं?

+0

ऐसा लगता है कि आप HttpResponseMessage पर एक कुकी सेट कर सकते हैं। इस धागे पर एक नज़र डालें, शायद यह http://stackoverflow.com/questions/5463431/setting-cookies-within-a-wcf-service –

उत्तर

22

System.Net.Http.Formatting.dll के लिए एक संदर्भ जोड़ें और AddCookies विस्तार विधि HttpResponseHeadersExtensions वर्ग में परिभाषित का उपयोग करें।

यहां a blog post describing this approach है, और MSDN topic है।

हैं कि विधानसभा आप के लिए एक विकल्प नहीं है, यहाँ इस से पहले से मेरे पुराने जवाब एक विकल्प था है:

पुराने जवाब इस प्रकार

मैं एक दृष्टिकोण है कि HttpResponseMessage के दायरे के भीतर रहता है पसंद करते हैं HttpContext जो इकाई के रूप में परीक्षण योग्य नहीं है और हमेशा होस्ट के आधार पर लागू नहीं होता है में खून बह रहा है बिना:

/// <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()); 
} 

तो फिर तुम जवाब में एक कुकी शामिल कर सकते हैं इस तरह:

HttpResponseMessage response; 
response.Headers.SetCookie(new Cookie("name", "value")); 
+0

मैं सहमत हूं, यह एक बेहतर विकल्प की तरह दिखता है। भविष्य में उपयोगकर्ताओं को मार्गदर्शन करने के लिए स्वीकृत उत्तरों को बदल दिया। –

+0

क्या यह संभव है कि यह अब कोई जवाब नहीं है? मुझे यह डीएलई मिल गया एकमात्र तरीका Nuget के माध्यम से है और यह स्पष्ट रूप से बताता है कि यह WebApi के लिए है। 2.0 से अधिक क्लाइंट और 2.1 से कम, इसलिए यह उत्तर WebApi 2 के लिए था। अब हम ASP.NET 4 और I के साथ हैं। अब यह डीएल नहीं मिल सकता है। –

+0

@IsaacLlopis मुझे लगता है कि वे इसे एक्सटेंशन डीएल से कोर तक ले जाया गया है। –

6

आप कुकी को HttpContext.Current.Response.Cookies संग्रह में जोड़ सकते हैं।

var cookie = new HttpCookie("MyCookie", DateTime.Now.ToLongTimeString()); 
    HttpContext.Current.Response.Cookies.Add(cookie); 
+0

आपकी मदद करेगा, बिल्कुल वही है जो मैं चाहता था और खुद के बारे में सोचना चाहिए था। लेकिन वास्तव में उम्मीद है कि 'HttpResponseMessage' पर उपलब्ध होना चाहिए। –

+0

यह मेरा पहला अनुमान भी था लेकिन किसी कारण से यह नहीं है। यह निश्चित रूप से परीक्षण क्षमता के लिए बेहतर होता। – Maurice

+21

यह उत्तर उस तरीके से है जिस पर वेबएपीआई का उपयोग किया जाना चाहिए। आपको WebAPI से HttpContext.Current का संदर्भ नहीं देना चाहिए क्योंकि यदि आप स्वयं होस्ट करते हैं तो यह अस्तित्व में नहीं होगा। बीटा बिट्स में इस तरह की सहायक उपयोगिताएं गायब थीं। आरसी ने एक AddCookies() एक्सटेंशन विधि को HttpResponseMessage में जोड़ा। हेडर जिन्हें आप इसके बजाय उपयोग करना चाहिए। – Andrew