asp.net - 是否可以从 Web API 访问 HttpContext.Current.Session

标签 asp.net asp.net-web-api

是否可以通过 WebAPI 访问 HttpContext.Current.Session ?我们可以让它继承 IRequiresSession 吗?

我有一个通用处理程序在我想删除的 API 调用之后执行 Session 设置。

public void AccountController : ApiController, IRequiresSessionState
{
public void Login()
{
setsession(){}
} 
}

最佳答案

从技术上讲,是的,虽然我真的不建议这种做法 - REST API 应该是完全无状态的(cookies 和其他客户端状态是可以的)。

如果你绝对必须这样做,你可以像这样获取 HTTP 上下文:

var context = Request.Properties["MS_HttpContext"] as HttpContext;

此时您只需使用它的 Session属性来获取 session 。

请注意,这违反了 System.Net.Http 假设的某些合约。 - 具体来说,这意味着您的 API Controller 永远无法自托管,因为它们与 ASP.NET 耦合。如果您对此感到满意,并且事实上您的 API Controller 可能无法从 Web 场正常工作,除非您重新构建所有内容以使用分布式 session - 那么,就去做吧。

附言也可以使用 IRequiresSessionState ,但是不能在 Controller 本身上使用,需要在HttpControllerHandler上使用并将其设置为 RouteHandler .在 this MSDN thread 中讨论了该方法。 .同样,我不能强烈推荐 反对 这个想法违反了 Web API 的基本原则 - 但是,如果您有充分的理由,那么它是另一种更可重用的选择。

关于asp.net - 是否可以从 Web API 访问 HttpContext.Current.Session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19884619/

相关文章:

c# - asp.net Oracle 调整线程休眠

asp.net - 在 ASP.NET 页面上多次重用变量

asp.net - New-WebServiceProxy cmdlet 失败并出现 "The operation has timed out"异常

c# - 在 ASP.NET Core API 2.1 中发送带有非 ASCII 字符 header 的请求

asp.net - 性能明智 MVC 是否比 ASP.NET 中的 Web 窗体更好

c# - 工作表名称不能为空

asp.net-web-api - Json.Net TypeNameHandling.Auto 和 Asp Web Api Controller 给出了意外的行为

javascript - 如何使用javascript将html插入文档

c# - 从 WebApi 中删除 XML 命名空间

c# - 使用 Task.FromResult 等待同步方法是否有意义