如果缺少必需的查询字符串参数,让asp.net页面抛出一个(自定义错误),让global.asax用Application_Error捕获它,然后将用户转移到错误页面,这有什么错吗?我有几个执行这些检查的基类,但我不确定向用户传达错误的最佳方式。
所以,就像这样:
int reqParam;
if(!isParamSet("myReqParam", out reqParam))
{
throw new QuerystringParamMissingException();
}
然后由global.asax中的Application_Error捕获。
另外,从安全的角度来看,我应该向用户提供多少信息?只是这是一个错误,或者缺少一个querystring参数,或者缺少哪个参数,或者甚至可能是该参数所指示的用途?
发布于 2010-05-19 20:15:08
这完全取决于错误的严重程度以及用户是否可以轻松地从错误中恢复。
一种观点是,用户不应该进行无效调用-所有需要查询字符串的链接都应该在客户端进行验证,因此在站点的正常运行期间,所有查询字符串都将是完整和有效的。因此,如果有参数丢失,这将是一个严重的错误,因此引发异常是一个非常有效的方法。
如果你想阻止人们修改查询字符串来访问他们不应该访问的系统部分,这将是很有用的。他们可能会遗漏一个参数,并且显示一个自定义错误页面可能不会给他们任何关于他们哪里出错的线索。
你应该记录这个错误--所以至少你知道什么时候错了,哪里错了。
发布于 2010-05-19 20:13:55
只要您不认为在正常的应用程序使用中会出现这种情况,这是一个可以接受的解决方案。
让异常在堆栈中冒泡的做法是破坏任何从错误中恢复的机会,在这种情况下,您可能无论如何都无法恢复。
发布于 2010-05-19 20:20:51
我相信只要你能控制这种情况,你就不应该让你的应用程序抛出错误。我的意思是,既然你知道一个参数可以是missing...so,你就可以提示用户,而不是抛出一个错误,然后让应用程序处理剩下的事情。
相反,提供一条用户友好的消息,帮助用户了解哪里出了问题!
谢谢,保重。
https://stackoverflow.com/questions/2865264
复制相似问题