Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net网站外部和内部用户的不同错误页_C#_Asp.net_Sql_Vb.net - Fatal编程技术网

C# ASP.Net网站外部和内部用户的不同错误页

C# ASP.Net网站外部和内部用户的不同错误页,c#,asp.net,sql,vb.net,C#,Asp.net,Sql,Vb.net,场景:我们有一个可以在内部和外部查看的网站。发生错误时,用户将显示详细的错误页面(堆栈跟踪等) 问题:外部客户不需要那么多关于错误的信息。我们希望让外部客户看到信息。请与管理员联系。如果可能的话,我们希望将此消息记录在SQL数据库中 注意:我假设我创建了一个自定义错误页面,如-但是如何确定用户是否为内部/外部用户?这也是解决问题的最佳方法吗?此外,如果有人对在数据库中存储这些错误的最佳方法提出建议,我们也将不胜感激 提前感谢。这篇文章正是您需要做的事情的正确方向。另见: 关于用户是内部

场景:我们有一个可以在内部和外部查看的网站。发生错误时,用户将显示详细的错误页面(堆栈跟踪等)

问题:外部客户不需要那么多关于错误的信息。我们希望让外部客户看到信息。请与管理员联系。如果可能的话,我们希望将此消息记录在SQL数据库中

注意:我假设我创建了一个自定义错误页面,如-但是如何确定用户是否为内部/外部用户?这也是解决问题的最佳方法吗?此外,如果有人对在数据库中存储这些错误的最佳方法提出建议,我们也将不胜感激


提前感谢。

这篇文章正是您需要做的事情的正确方向。另见:


关于用户是内部用户还是外部用户的确定将由web服务器处理。

这篇文章正确地描述了您需要做的事情。另见:


有关用户是内部用户还是外部用户的确定将由web服务器处理。

您可以尝试在web.config中将
模式设置为RemoteOnly

<customErrors mode="RemoteOnly">

这样,本地用户将看到错误,外部用户将看到您设置的其他错误页面


这里有一篇关于这些事情的文章

您可以在web.config中将
模式
设置为RemoteOnly

<customErrors mode="RemoteOnly">

这样,本地用户将看到错误,外部用户将看到您设置的其他错误页面


这里有一篇关于这类事情的文章

我这样做的方式是为外部和内部用户提供不同的入口点。我会通过主机名来实现这一点。通过改变主机名,我可以为每种类型的用户创建自定义错误体验

我这样做的方式是为外部和内部用户提供不同的入口点。我会通过主机名来实现这一点。通过改变主机名,我可以为每种类型的用户创建自定义错误体验

如果“内部”是指登录,“外部”是指匿名,则可以使用相同的自定义错误页,但使用
请求检查用户的登录状态。IsAuthenticated

然后,您可以根据用户的状态简单地显示消息

对于错误的存储,可以使用log4net和/或ELMAH。ELMHA专门用于捕获未处理的异常。Log4net主要用于从代码中进行日志记录,即从try/catch语句中进行日志记录


两者都使用是很好的做法。

如果“内部”是指登录,而“外部”是指匿名,则可以使用相同的自定义错误页,但使用
请求检查用户的登录状态。IsAuthenticated

然后,您可以根据用户的状态简单地显示消息

对于错误的存储,可以使用log4net和/或ELMAH。ELMHA专门用于捕获未处理的异常。Log4net主要用于从代码中进行日志记录,即从try/catch语句中进行日志记录


最好同时使用这两种方法。

customErrors for RemoteOnly可能对您没有帮助,因为RemoteOnly仅指不从同一物理框访问页面的用户。LAN上的用户将被视为远程用户,就像来自WAN的用户一样

如果我必须解决您的问题,我会从应用程序_错误开始,检查Request.UserHostAddress和Request.UserHostName,但即使是它们也不会完全可靠,因为在我的公司内部网上,我的地址10.4.42.219可能与贵公司的内部地址非常匹配,UserHostName应该是一个人类可读的名称,但它并不总是这样——举个例子,看看它在调试模式下运行时,UserHostAddress和UserHostName都将是“127.0.0.1”,而您希望后者是“localhost”

这里的问题是,当他们攻击你的Web服务器时,他们已经在防火墙内,而服务器是一个侦听器-因此,不管传入连接声称来自哪个IP(欺骗是一个非常真实的问题),你的Web服务器都不会启动响应,它将沿着客户端打开的管道发送响应

现在,如果您的防火墙可以配置为利用欺骗并强制IP成为特定值,那么这将是可靠地识别外部连接以及通过消除过程识别内部连接的一种可能方法,但我不能肯定这种方法的可行性

编辑添加:我怀疑你最初的问题本身可能有缺陷。我问自己的问题是,在你的内部,谁真正关心错误消息?您的公司秘书是否想要查看堆栈跟踪信息?可能不会


我怀疑您在这里真正需要的是主动身份验证和基于角色的安全性,这样,只有明确标识的用户(可能是“错误调查者”角色的成员)才能看到这些详细的异常,而其他所有人,包括内部用户,获取漂亮的自定义页面。

RemoteOnly的customErrors可能对您没有帮助,因为RemoteOnly仅指不从同一物理框访问页面的用户。LAN上的用户将被视为远程用户,就像来自WAN的用户一样

如果我必须解决您的问题,我会从应用程序_错误开始,检查Request.UserHostAddress和Request.UserHostName,但即使是它们也不会完全可靠,因为在我的公司内部网上,我的地址10.4.42.219可能与贵公司的内部地址非常匹配,UserHostName应该是一个人类可读的名称,但在poi中并不总是如此