具体来说,是Session变量。我的ASP.NET MVC项目中有一个.ashx,它将一些图像数据显示给用户,我需要能够访问我在会话中存储的对象。从控制器我可以很好地拉动对象,但在我的ashx页面中,context.Session为null。有什么想法吗?谢谢!
这是我正在尝试做的一个例子...... context.Session总是返回null。
private byte[] getIconData(string icon)
{
//returns the icon file
HttpContext context = HttpContext.Current;
byte[] buffer = null;
//get icon data
if ( context.Session["tokens"] != null)
{
//do some stuff to get icon data
}
}
答案 0 :(得分:22)
您必须在代码中导入System.Web程序集,然后您可以执行以下操作:
HttpContext context = HttpContext.Current;
return (User)context.Session["User"];
编辑:
伙计,我在这里做了一些测试,它对我有用,尝试这样的事情:
创建一个帮助器类来封装你获取会话变量的东西,它必须导入System.Web程序集:
public class TextService
{
public static string Message {
get
{
HttpContext context = HttpContext.Current;
return (string)context.Session["msg"];
}
set
{
HttpContext context = HttpContext.Current;
context.Session["msg"] = value;
}
}
}
然后在您的控制器中,您应该执行以下操作:
TextService.Message = "testing the whole thing";
return Redirect("/home/testing.myapp");
在你的其他课程中你可以调用辅助类:
return TextService.Message;
试一试。
答案 1 :(得分:2)
好的,所以我最终要做的....在我的ashx文件中,我添加了IReadOnlySessionState接口,它将访问会话状态就好了。所以它看起来像这样......
public class getIcon : IHttpHandler, IReadOnlySessionState
答案 2 :(得分:1)
在.Net核心中,访问控制器外部HTTPContext的最佳方法是使用IHttpContextAccessor。使用DI,我们可以访问诸如_httpContextAccessor.HttpContext.User和_httpContextAccessor.HttpContext.HttpContext之类的User / HttpContext对象。 有关详细答案,请参阅此link。 谢谢!
答案 3 :(得分:0)
要为.net core 2.1+节省任何人的挖掘工作:
将以下内容添加到Startup.cs中的公共void ConfigureServices(...):
services.AddHttpContextAccessor();
通过注入服务/等来使用:
public MyService(IHttpContextAccessor httpContextAccessor) { //... }
感谢:https://adamstorr.azurewebsites.net/blog/are-you-registering-ihttpcontextaccessor-correctly