是否可以通过WebAPI访问HttpContext.Current.Session?我们可以使其继承IRequiresSession吗?
我有一个通用处理程序,在要删除的API调用之后进行会话设置。
public void AccountController : ApiController, IRequiresSessionState
{
public void Login()
{
setsession(){}
}
}
从技术上讲,是的,尽管我确实反对这种做法-REST API应该完全无状态(cookie和其他客户端状态是可以的)。
如果绝对必须这样做,则可以像这样获取HTTP上下文:
var context = Request.Properties["MS_HttpContext"] as HttpContext;
此时,您只需使用其Session属性即可获取会话。
请注意,这违反了某些假定的约定System.Net.Http
-特别是这意味着您的API控制器永远无法自我托管,因为它们已与ASP.NET耦合。如果您对此表示满意,并且您的API控制器可能无法从Web场正常工作,除非您重新架构所有内容以使用分布式会话-那么,那就去吧。
PS也可以使用IRequiresSessionState
,但是您不能在控制器本身上使用它,需要在上使用并将其HttpControllerHandler
设置为RouteHandler
。在此MSDN线程中讨论了该方法。同样,对于这种想法,我不能提出足够强烈的建议,因为它违反了Web API的基本原理-但是,如果您确实有充分的理由,那么这是另一个可重用的选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句