AuthenticationContext设置的Cookie值I

AuthenticationContext设置的Cookie值I

本文介绍了在HttpAuthenticationContext设置的Cookie值IAuthenticationFilter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有必要在一个管道的WebAPI的认证步骤读/写饼干。我创建了一个自定义过滤器这一点。

在试图遵守自托管的概念,什么是访问和写入的cookie到客户端安全的方式? 里克·斯特劳的评论说,如果我们使用 HttpContext.Current.Response.Cookies.Add(),和我的应用程序是自托管,上下文可能/将不存在。

所以,我怎么会写一个cookie到客户端使用 HttpAuthenticationContext ,仍然是自托管的安全?


解决方案

  HttpAuthenticationContext authContext;
authContext.ActionContext.Response.Headers.AddCookies(/ *饼干* /);

EDIT2

  HttpAuthenticationContext authContext;
VAR的myCookie =新CookieHeaderValue(键,值)
authContext.ActionContext.Response.Headers.Add(设置Cookie,myCookie.ToString());

修改

的addCookie是位于System.Net.Http.Formatting.dll扩展方法(如版本v5.2.2.0的),并且延伸方法由静态类型Htt presponseHeadersExtensions,位于命名系统声明。 Net.Http。


  • 如果您找不到扩展方法,试图找到的Htt presponseHeadersExtensions类。


  • 如果您找不到的Htt presponseHeadersExtensions类,尽量提升网页API 2库。提升每一个项​​目的WebApi2所有的Nu​​Get包(对于那些谁恨升级的NuGet包像我)的最有效方式,是做一个全球性的搜索/的短期版=XXXtargetFramework =net45的.config文件替换'(其中xxx是一个旧版本替换为'版本=5.2.2targetFramework =net45


  • 在最坏的情况下,如果你的老板或你的妈妈不会让你升级的NuGet包,可以随时采取反叛的态度和反编译包含的addCookie的code,它看起来是这样的:

     使用系统;
        使用System.Collections.Generic;
        使用System.ComponentModel;
        使用System.Net.Http.Headers;
        使用System.Net.Http.Properties;
        使用System.Web.Http;
        命名空间System.Net.Http
        {
            ///<总结>提供的&lt推广方法;见CREF =T:System.Net.Http.Headers.Htt presponseHeaders/>类。 < /总结>
            [EditorBrowsable(EditorBrowsableState.Never)
            公共静态类的Htt presponseHeadersExtensions
            {
                私人常量字符串的setcookie =设置Cookie
                ///<总结>添加Cookie来响应。每个设置Cookie头重新psented如吲$ P $;见CREF =T:System.Net.Http.Headers.CookieHeaderValue/>实例。 A<见CREF =T:System.Net.Http.Headers.CookieHeaderValue/>包含域,路径和其它cookie信息,以及信息的一个或以上<见CREF =T:System.Net.Http.Headers.CookieState/>实例。每个<见CREF =T:System.Net.Http.Headers.CookieState/>实例包含一个cookie名称和任何Cookie状态是联想这个名字。该州是一个&LT的形式;见CREF =T:System.Collections.Specialized.NameValueCollection/>其中上线为连接$ C $光盘作为HTML表单URL-CN codeD数据。这将重新presentation允许多个相关的曲奇要在同一个Cookie头内进行,同时还提供每个Cookie状态之间的分离。样本Cookie头如下所示。在本实施例中,有两个与下;参见CREF =T:System.Net.Http.Headers.CookieState/>分别的名称和STATE1 STATE2。此外,每个Cookie状态包含两个名称/值对(名1 / value1和NAME2 /值2)和(NAME3 / VALUE3和NAME4 / VALUE4)。 &放大器; LT; code&放; GT;设置Cookie:STATE1:名1 =值1&放大器;放大器;放大器; 2 =值2; STATE2:NAME3 = VALUE3&放大器;放大器;放大器; NAME4 =值4;域=域1; PATH = PATH1; &放大器; LT; / code&放; GT;< /总结>
                ///< PARAM NAME =头>在响应头< /参数>
                ///< PARAM NAME =曲奇>该Cookie值添加到响应< /参数>
                公共静态无效AddCookies(这Htt的presponseHeaders头,IEnumerable的< CookieHeaderValue>饼干)
                {
                    如果(头== NULL)
                    {
                        扔Error.ArgumentNull(头);
                    }
                    如果(饼干== NULL)
                    {
                        扔Error.ArgumentNull(曲奇);
                    }
                    的foreach(在cookie中CookieHeaderValue电流)
                    {
                        如果(当前== NULL)
                        {
                            扔Error.Argument(曲奇,Resources.CookieNull,新的对象[0]​​);
                        }
                        headers.TryAddWithoutValidation(设置Cookie,current.ToString());
                    }
                }
            }
        }


    • 在最后,你觉得有点愚蠢花这么多时间去寻找一个扩展方法,当你意识到,在加入webapi2一个cookie以线code的做法仅仅是:


这篇关于在HttpAuthenticationContext设置的Cookie值IAuthenticationFilter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-21 07:25