检测请求是来自“网站项目”还是“控制台项目”
本文关键字:项目 网站项目 还是 控制台项目 控制台 网站 请求 检测 | 更新日期: 2023-09-27 18:31:29
我想知道检测请求从何处发送的最佳方法是什么(函数调用)
意思:我的项目是这样的:
- 发动机
- Web 项目(使用引擎)
- 测试项目控制台项目(使用引擎)
现在我希望在运行测试项目时不会在函数中执行某些代码。
我知道我可以发送一个布尔参数来检测这一点,但我想知道是否有任何理由来检测请求是否来自 web 项目......
谢谢!!
奥廖尔。
如果根据调用是来自 Web 项目还是控制台项目,调用的代码的行为应有所不同,则代码不应位于共享库中。它确实属于各自的项目。
您可以检查HttpContext.Current
是否为空。 然而,@JustinNiessner的建议仍然适用。
使用 TESTPROJECT 符号集编译测试项目,不使用此符号编译 Web 项目。然后,由于 ConditionalAttribute,只有当您的代码是从测试项目中调用时,才会执行 SetIsFromTest() 方法(因此字段 IsFromTest 将设置为 true)。
static class Class1
{
static bool IsFromTest = false;
static Class1()
{
SetIsFromTest();
}
[Conditional("TESTPROJECT")]
public static void SetIsFromTest()
{
IsFromTest = true;
}
}
另一种选择是从共享库测试调用程序集的名称。
if(System.Reflection.Assembly.GetCallingAssembly().FullName == "...")
您可以使用 StackFrame 对象来访问堆栈跟踪,并查看之前调用您的方法的方法是什么。通过使用该方法,您可以轻松找到相应的项目。从较旧的帖子:
StackTrace trace = new StackTrace();
int caller = 1;
StackFrame frame = trace.GetFrame(caller);
MethodBase callerMethod = frame.GetMethod();
虽然我应该警告你,这是你应该只用于娱乐/调试时的东西。