Kub*_*ubi 27 asp.net asp.net-web-api
是否可以通过WebAPI访问HttpContext.Current.Session?我们可以让它继承IRequiresSession吗?
我有一个通用处理程序在我想要删除的API调用之后执行会话集.
public void AccountController : ApiController, IRequiresSessionState
{
public void Login()
{
setsession(){}
}
}
Run Code Online (Sandbox Code Playgroud)
Aar*_*ght 49
从技术上讲,是的,尽管我真的建议不要这样做 - REST API应该是完全无状态的(cookie和其他客户端状态都可以).
如果你绝对必须这样做,你可以抓住HTTP上下文,如下所示:
var context = Request.Properties["MS_HttpContext"] as HttpContext;
Run Code Online (Sandbox Code Playgroud)
此时,您只需使用其Session属性来获取会话.
请注意,这会破坏某些合同System.Net.Http- 特别是它意味着您的API控制器永远不能自托管,因为它们与ASP.NET耦合.如果您对此没有问题,并且您的API控制器可能无法从Web场正常工作,除非您重新设计所有内容以使用分布式会话 - 那么,请继续使用它.
PS它也可以使用IRequiresSessionState,但你不能在控制器本身上使用它,你需要在它上面使用它HttpControllerHandler并将其设置为RouteHandler.该MSDN线程中讨论了该方法.同样,我不能强烈反对这个想法,它违反了Web API的基本原则 - 但是,如果你有一个非常好的理由,那么它是另一种选择,它更可重复使用.
Nic*_*ico 16
使用Web Api 2.1将它转换为HttpContext并不适用于我.但是我可以使用HttpContextWrapper.
var context = Request.Properties["MS_HttpContext"] as HttpContextWrapper;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36537 次 |
| 最近记录: |