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

时间:2012-04-18 18:31:25

标签: c# web console-application

我想知道检测请求发送位置的最佳方法是什么(函数调用)

意思是:我的项目是这样的:

  • 引擎
  • Web项目(使用引擎)
  • 测试项目 - 控制台项目(使用引擎)

现在我希望在运行Test项目时,函数中不会执行某些代码。

我知道我可以发送一个布尔参数来检测这个,但我想知道是否有任何原因可以检测请求是否来自web项目......

谢谢!

奥勒尔。

4 个答案:

答案 0 :(得分:3)

如果调用的代码根据调用是来自Web项目还是控制台项目而表现不同,则代码不应位于共享库中。它确实属于各自的项目。

答案 1 :(得分:2)

您可以检查HttpContext.Current是否为空。然而,@ JustinNiessner的建议仍然适用。

答案 2 :(得分:2)

使用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 == "...")

答案 3 :(得分:0)

您可以使用StackFrame对象访问堆栈跟踪,并查看以前调用您的方法的内容。通过使用该方法,您可以轻松找到相应的项目。从较早的post开始:

StackTrace trace = new StackTrace();
int caller = 1;
StackFrame frame = trace.GetFrame(caller);
MethodBase callerMethod = frame.GetMethod();

虽然我应该警告你,你应该只使用它来进行调试。