c# - 可以因缺少必需的查询字符串参数而引发错误吗?

标签 c# asp.net

如果缺少必需的查询字符串参数,并且让 global.asax 使用 Application_Error 捕获它,然后将用户转移到错误页面,那么让 ASP.NET 页面抛出(自定义错误)是否有任何问题?我有几个执行这些检查的基类,但我不确定向用户传达错误的最佳方式。

所以,像这样:

int reqParam;
if(!isParamSet("myReqParam", out reqParam))
{
   throw new QuerystringParamMissingException();
}

然后由 global.asax 中的 Application_Error 捕获。

此外,从安全角度来看,我应该向用户提供多少信息?只是这是一个错误,或者缺少查询字符串参数,或者缺少哪个参数,甚至可能该参数指示的用途是什么?

最佳答案

这完全取决于错误的严重程度以及用户是否可以轻松地从错误中恢复。

一种观点是用户不应该能够进行无效调用 - 所有需要查询字符串的链接都应该在客户端进行验证,因此在网站正常运行期间,所有查询字符串都将是完整且有效的。因此,如果缺少参数,将是一个严重的错误,因此引发异常是一种完全有效的方法。

如果您想阻止人们修改查询字符串以访问他们不应该访问的系统部分,这将很有用。他们可能会错过某个参数,并且显示自定义错误页面可能不会为他们提供任何有关错误的线索。

不过,您应该记录错误 - 这样至少您知道什么时候错了以及错在哪里。

关于c# - 可以因缺少必需的查询字符串参数而引发错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2865264/

相关文章:

c# - 通过多个订阅者的 'routing' 事件模式?

c# - C#中对象之间的转换

c# - 排序列表并在排序后将特定元素保留在列表末尾

jquery - 页面 url 在重定向时不会更改

c# - 如何将 passwordchar 属性设置为 asp.net 文本框?

javascript - 在 Web 浏览器控件中触发 html 按钮

c# - 使用 LINQ 将属性值与字典键匹配

c# - 按钮切换 div 可见属性

c# - 为什么我应该在 C# 中使用 int 而不是 byte 或 short

java - 我必须在 Web 应用程序中将文件存储在 MS SQL 2008 DB 中。您建议将其存储为 xml 字符串还是 blob?