问题描述
我有必要在一个管道的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所有的NuGet包(对于那些谁恨升级的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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!