2012-03-20 7 views
15

web apiでデモログインサービスを作成し、その応答にクッキーを設定する必要があります。それ、どうやったら出来るの?あるいは、承認を行うためのより良い方法がありますか?HttpReponseMessageで応答クッキーを設定するにはどうすればよいですか?

+0

HttpResponseMessageでCookieを設定できるようには見えません。このスレッドを見て、多分それが役立ちますhttp://stackoverflow.com/questions/5463431/setting-cookies-within-a-wcf-service –

答えて

22

System.Net.Http.Formatting.dllへの参照を追加し、HttpResponseHeadersExtensionsクラスで定義されAddCookies拡張メソッドを使用します。

ここではa blog post describing this approachMSDN topicです。

そのアセンブリは、あなたのためのオプションではない場合は、ここではこの前から私の古い答えはオプションだったのです。

古い答えは

私はHttpResponseMessageの領域内に留まるアプローチを好むが、以下の

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

次に、あなたが応答でクッキーを含めることができますユニットとしてテスト可能ではなく、常にホストによっては適用されませんのHttpContextへの出血なし

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

私は同意します。より良い選択肢のように見えます。受け入れられた回答を今後ユーザーを誘導するために変更しました。 –

+0

これはもはや答えではない可能性がありますか?私はこのdllを見つけた唯一の方法はNugetを介しており、WebApi.Clientが2.0以上2.1未満であることを明示的に述べているので、この回答はWebApi 2用です。ASP.NET 4とIもうこのdllを見つけることができません。 –

+0

@IsaacLlopis私は彼らが拡張dllからコアに移動したと思います。 –

6

CookieをHttpContext.Current.Response.Cookiesコレクションに追加できます。

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

ありがとう、ちょうど私が欲しかったし、自分自身を考えていたはずです。しかし、実際には 'HttpResponseMessage'で利用できると期待していました。 –

+0

それは私の最初の推測でしたが、何らかの理由でそうではありませんでした。それは確かにテスト能力の方が良いでしょう。 – Maurice

+21

この回答は、WebAPIを使用する方法に反するものです。 WebAPIからHttpContext.Currentを参照するべきではありません。自己ホストの場合は存在しません。ベータビットには、このようなヘルパーユーティリティの負荷がありませんでした。 RCは、代わりに使用する必要があるHttpResponseMessage.HeadersにAddCookies()拡張メソッドを追加しました。 – Andrew

関連する問題