我想知道检测请求发送位置的最佳方法是什么(函数调用)
意思是:我的项目是这样的:
现在我希望在运行Test项目时,函数中不会执行某些代码。
我知道我可以发送一个布尔参数来检测这个,但我想知道是否有任何原因可以检测请求是否来自web项目......
谢谢!
奥勒尔。
答案 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();
虽然我应该警告你,你应该只使用它来进行调试。