检测请求是来自“网站项目”还是“控制台项目”

本文关键字:项目 网站项目 还是 控制台项目 控制台 网站 请求 检测 | 更新日期: 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();

虽然我应该警告你,这是你应该只用于娱乐/调试时的东西。