gpt4 book ai didi

asp.net-mvc - 为什么 HttpContext.Current 在 asp.net mvc 中的用户定义类中始终为空?

转载 作者:行者123 更新时间:2023-12-04 14:28:17 27 4
gpt4 key购买 nike

我创建了一个名为 MyLongRunningClass 的类包含以下方法:

 public string ProcessLongRunningAction(IEnumerable<HttpPostedFileBase> files ,string id)
{
int currentIndex = 0;

foreach (HttpPostedFileBase file in files)
{
currentIndex++;
lock(syncRoot)
{
string path=HttpContext.Current.Server.MapPath("~//Content//images //"+file.FileName);//Excecption is created here........
file.SaveAs(path);
}
Thread.Sleep(300);
}
return id;
}

从 Controller 调用此方法并使用要保存在图像目录中的文件列表。每当 HttpContext.Current.Server.MapPath("~//Content//images//"+file.FileName)被执行 NullReferenceException抛出,和 HttpContext.Current总是 null .当我使用 session 时也会发生同样的事情。我不知道代码有什么问题。

最佳答案

看起来您正在运行 ProcessLongRunningAction在一个单独的线程上。

然而HttpContext.Current当您不在原始请求线程中运行时,将返回 null。这是 explained here .

如果您在创建的每个线程上手动设置上下文,则可以使用它。这在 SO 中的类似问题上进行了讨论,例如 herehere .

但是,鉴于您的问题中的代码,如果您只是为该方法中的路径添加一个参数会更好,正如 Johann Blais 所建议的那样。然后,您将解析原始请求线程中的路径并将其传递给该方法,然后该方法可以在单独的线程上运行。这样你的方法就不会依赖于 HttpContext.Current .

关于asp.net-mvc - 为什么 HttpContext.Current 在 asp.net mvc 中的用户定义类中始终为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22323448/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com