我一直在为我的ASP.NET Core API编写一些日志记录服务。
我写了一个中间件,它将记录每个被调用的行为(交叉关注,似乎是合乎逻辑的)。在控制器之外使用HttpContext - 糟糕的做法?
我想记录的一件事是用户的IP(例如)。 我能想到得到这些数据的唯一方法是通过HttpContext.Connection
。
它按预期工作。
But lately I've been reading有关它的更多信息,我明白访问控制器外部的HttpContext
被认为是不好的做法。 它使代码不可测试,因为它很难模拟和模仿。
此外,代码不能移植到其他.NET应用程序,并且必须位于ASP.NET应用程序的上下文中。
所以我的问题是 - 在控制器之外使用HttpContext是否真的是一种很糟糕的做法 - 例如在中间件内部?
如果是这样 - 有什么选择?
或者可能使用HttpContext
在ASP.NET内部使用的组件(如顶级控制器或中间件)内部是合法的。
谢谢。
这取决于。如果你在你的域层(=域服务)中引用它,那么它绝对是你能做的最糟糕的事情之一,因为域不能对基础设施有任何依赖(db,webservice,像asp.net,wpf,uwp等主机)。如果它在应用程序层(=应用程序服务)上使用,则没关系。不同之处在于,应用程序级别与应用程序有关,很难或根本不可移植(即访问httpcontext信息,因为没有httpcontext,所以它不能在WPF上工作) – Tseng
@Tseng,是的,这样认为。这就是为什么我问是否可以在顶级控制器和中间件中使用它 - 意味着任何必须在ASP.Net – DotnetProg