我在Global.asax文件中(在ASP.NET MVC应用程序中)使用Application_BeginRequest事件观察到一些非常令人困惑的行为.当通过调试器运行时,如果我刷新浏览器(IE7),此事件将触发两次.如果我单击链接或以其他方式手动请求页面,它会触发一次 - 如预期的那样.
为什么刷新导致BeginRequest触发两次?
我正在通过一个全新的MVC项目来观察这一点,其中以下内容被加入到Global.asax.cs中
protected void Application_BeginRequest() {
//executed twice
}
Run Code Online (Sandbox Code Playgroud)
对于上下文,我试图在此事件期间向HttpContext.Current.Items集合添加一个新对象,因此它将在整个请求过程中持续存在.显然,我不希望这次刷新请求发生两次!
我有一个模板文件,其中包含我的页眉,页脚和常用信息.它包括当前页面的适当内容(两步视图模式).
我正在尝试使用PHP Session变量建立登录系统.我可以设置变量,有时它们可以工作,但有时它们会消失.点击链接有时会让他们回来.
登录
用户名:测试密码:test
还有var_dumps的session_id,并$_SESSION在顶部.
点击主页.如果会话变量消失,请单击home(可能需要多达10次)以查看会话信息.单击其他导航,有时会话信息会粘在一起,有时则不会.
这是我的模板文件顶部的会话代码.
<?php
session_start();
require './classes/DBInterface.php';
$db = new DBInterface();
if($_REQUEST['submit'] == 'Login') {
$username=$_POST['username'];
$password=$_POST['password'];
echo '-- login -- '.$username;
$rs = $db->verify($username,$password,"admin",0);
$admin = $rs->current();
if ($rs->valid()) {
$_SESSION['username'] = $username;
}
}
echo ' -- session id -- ';
var_dump(session_id());
echo ' -- session var -- ';
var_dump($_SESSION);
Run Code Online (Sandbox Code Playgroud)
我使用的是PHP5.
我正在寻找一些关于单元测试的建议,其方式是不要在生产代码中留下"测试钩子".
假设我有一个名为MethodLogger的静态类(VB.NET模块),它有一个"void WriteEntry(string Message)"方法,用于将调用方法和消息写入磁盘上的日志文件.WriteEntry()的实际目标可以转移到IMethodLogger的伪实现以运行单元测试,对于所有其他情况,它应该调用IMethodLogger的实际实现.
这是我到目前为止所提出的内容的粗略描述,我喜欢这种方法 - 但在一些快速测试中它提出了一些问题和怀疑:
[InternalAttributesVisibleTo("MethodLogger.Tests")]
internal static class MethodLogger
{
public void WriteEntry(string message)
{
LogWriter.WriteEntry(message);
}
private IMethodLogger LogWriter
{
get;
set;
}
#if DEBUG
internal void SetLogWriter(IMethodLogger logger)
{
LogWriter = logger;
}
#endif
}
Run Code Online (Sandbox Code Playgroud)
这是我的具体问题:
这将单元测试与DEBUG构建的运行紧密结合在一起; 当我运行单元测试时虽然它似乎没有专门重建DEBUG中的测试组件 - 是否可以这样做?
我可以使用像"TEST"这样的自定义预编译器标志来代替"DEBUG"吗?我将如何告诉Visual Studio始终使用此标志重建目标以进行测试以确保我的钩子/接缝可用?
我目前正与我的同事讨论如何设计一个将由我的部门使用的API.具体来说,我的任务是编写一个API,作为访问Active Directory信息的包装 外观 - 根据我公司/部门的需求量身定制.我知道开源封装 外墙已经存在,但这不是这个问题的症结所在,仅仅是用来作为一个例子.
当我向我的团队提交我的设计方案时,他们让我失望,因为API不够"可配置".他们声称他们不希望API在"电话号码"和<隐藏电话号码的Active Directory表示>之间建立链接.会议中的每个人(除了我)都同意他们更愿意四处询问"Active Directory中用于用户电话号码的正确字段是什么?",并将其插入各自的应用程序(LOL!).
他们问我,"如果我们公司决定使用不同的字段的电话号码,你不在身边尽在改变你的源代码吗?" 他们最终承认他们害怕改变其他人的源代码,即使代码是原始的并且进行了大量的单元测试.我所在部门的每个高级IT人员都同意这一点.
在设计软件时,这真的是正确的态度吗?!
有没有办法排除位于InstallShield中动态链接下的文件夹?
所以我有一个从PATH A开始的动态链接,以下是一个小例子目录结构:
PATH A
--- PATH B
--- PATH C (which contains files)
--- PATH D (which contains files)
--- PATH E (which contains files)
--- PATH F
--- PATH G (which contains files)
Run Code Online (Sandbox Code Playgroud)
目前我有一个动态链接,从PATH A开始,包括子目录,并使用带有一些显式文件排除的*.*通配符.
我现在要做的是完全排除目录,例如从上面的示例目录结构中完全排除PATH F.
我有一个JSF转换器,我用于包含几种不同实体类型的SelectItem列表.在getAsString()方法中,我创建字符串作为后缀为":"的类名和ID.
MySuperClass superClass = (MySuperClass)value;
if(superClass != null) {
return String.valueOf(superClass.getClass().getName()+":"+superClass.getId());
}
Run Code Online (Sandbox Code Playgroud)
这允许我getAsObject()通过这样做在从UI返回的路上加载正确的实体:
String className = value.substring(0, value.indexOf(":"));
long id = Long.parseLong(value.substring(value.indexOf(":")+1));
Class<T> entitySuperClass = (Class<T>) Class.forName(className);
MySuperClass superClass = (MySuperClass)getEntityManager().find(entitySuperClass, id);
Run Code Online (Sandbox Code Playgroud)
我的问题是我的实体getAsString()是代理.因此,com.company.MyEntity当我执行getClass().getName()时,我得到的com.company.MyEntity_$$_javassist_48却是失败的find().
有没有办法(除了字符串操作)获取具体的类名(例如com.company.MyEntity)?
谢谢.
有谁知道用Python库导入OpenSSL RSA私钥/公钥(使用密码)并使用它来解密消息的最简单方法.
我看了一下ezPyCrypto,但似乎无法识别OpenSSL RSA密钥,我尝试使用importKey导入密钥,如下所示:
key.importKey(myKey, passphrase='PASSPHRASE')
Run Code Online (Sandbox Code Playgroud)
在我的例子中,myKey是一个以字符串形式表示的OpenSSL RSA公钥/私钥对.
这个有:
必须使用键实例作为第一个参数调用unbound方法importKey()(改为使用str实例)
API文档说:
importKey(self,keystring,**kwds)
有人可以建议我如何阅读使用ezPyCrypto的密钥吗?我也尝试过:
key(key, passphrase='PASSPHRASE')
Run Code Online (Sandbox Code Playgroud)
但是这个:
ezPyCrypto.CryptoKeyError:尝试导入无效密钥,或密码错误
链接到这里的文档:
http://www.freenet.org.nz/ezPyCrypto/detail/index.html
编辑:只是对此的更新.已成功导入RSA密钥,但由于eqPyCrypto不支持AES分组密码,因此解密时遇到实际问题.只是让人们知道.我成功地设法使用ncrypt(http://tachyon.in/ncrypt/)做我想做的事.尽管安装的版本超出了最低要求,但由于SWIG和OpenSSL编译问题,我在M2Crypto中遇到了一些编译问题.看起来Python加密/解密框架目前还是一个雷区.哼哼,谢谢你的帮助.
我打算自学PHP.我想知道我是否应该使用LAMP或Microsoft堆栈.我可以访问这两个.我想知道哪个最容易学,哪个最相关.
我安装了Netbeans然后我试图在Netbeans中检查我的项目.在这个过程中,Netbeans告诉我一些旧的客户端版本的subversion,现在我想升级它.但我不知道客户端在哪里,也不知道如何更新它.
顺便说一下,我在同一台机器上安装了TortoiseSVN,并且它在同一个存储库中工作正常,而且当我使用svn + ssh协议时,我将Netbeans配置为使用TortoisePlink.exe.
我有一个应用程序,它加载程序集并查找类型,这些类型是应用程序引用的另一个程序集A1中定义的类C1的子类.我在A1中定义了一个类型T,它是C1的子类,但是当我使用Assembly.Load(...)加载A1时,在TI实例上调用t.IsSubclassOf(typeof(C1))得到false.我注意到当前appdomain中有2个程序集A1的实例,如果我从其中一个实例中获取C1类型而不是两个实例,则t.IsSubclassOf(C1)可以工作.我不太明白这种行为,任何人都可以解释一下吗?此外,我如何修复我的应用程序,以便无论是加载A1还是其他程序集来查找C1的子类型?