可以欺骗HTTPContext.Current?

JL.*_*JL. 4 c#

我在程序集中有这行代码:

 HttpContext.Current.Server.MapPath
Run Code Online (Sandbox Code Playgroud)

如果在Web服务中使用程序集,这非常有用.

但是,如果我把它从Web服务中取出,那么它就不会起作用了,因为HTTPContext不存在.

是否有可能欺骗httpContext认为它存在,真的只是为了获得目录的相对路径结构?

我的意思是以某种方式手动创建HTTPContext对象,并为其分配一个基本目录?

更新

是否有更通用的方法:HttpContext.Current.Server.MapPath

可以在可执行文件中工作的东西,以及可以在Web上工作的东西?

sis*_*sve 6

HttpContext.Current "获取或设置 HttpContext对象".HttpContext有一个公共构造函数,它接受一个HttpWorkerRequest(抽象,使用SimpleWorkerRequest),你就可以完全伪造HttpContext.

我同意其他人的意见,你可以重构你的代码以消除这种依赖,但有些情况下,你必须伪造HttpContext.Current的东西,在这种情况下,如果你搜索这个问题将出现...


小智 5

在我看来,你需要在另一个对象中包含对HttpContext的调用,然后你可以使用IOC在正确的环境中切换出正确的对象.例如,像IMapPath作为您的接口,然后您的实现可能是HttpMapPath或ConsoleAppMapPath等.