关闭

安全地使用HttpContext.Current

713人阅读 评论(0) 收藏 举报
分类:

<>

安全地使用HttpContext.Current

有时我们会写些通用类库给ASP.NET或者WindowsService程序来使用,例如异常记录的工具方法。 对于ASP.NET程序来说,我们肯定希望在异常发生时,能记录URL,表单值,Cookie等等数据,便于事后分析。 然而对于WindowsService这类程序来说,您肯定没想过要记录Cookie吧? 那么如何实现一个通用的功能呢?

方法其实也简单,就是要判断HttpContext.Current是否返回null,例如下面的示例代码:

public static void LogException(Exception ex)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("异常发生时间:").AppendLine(DateTime.Now.ToString());
    sb.AppendLine(ex.ToString());

    // 如果是ASP.NET程序,还需要记录URL,FORM, COOKIE之类的数据
    HttpContext context = HttpContext.Current;
    if( context != null ) {
        // 能运行到这里,就肯定是在处理ASP.NET请求,我们可以放心地访问Request的所有数据
        sb.AppendLine("Url:" + context.Request.RawUrl);

        // 还有记录什么数据,您自己来实现吧。
    }

    System.IO.File.AppendAllText("日志文件路径", sb.ToString());
}

就是一个判断,解决了所有问题,所以请忘记下面这类不安全的写法吧:

HttpContext.Current.Request.RawUrl;
HttpContext.Current.Server.MapPath("xxxxxx");

下面的方法才是安全的:

HttpContext context = HttpContext.Current;
if( context != null ) {
    // 在这里访问与请求有关的东西。
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:750928次
    • 积分:12097
    • 等级:
    • 排名:第1351名
    • 原创:469篇
    • 转载:26篇
    • 译文:2篇
    • 评论:70条
    最新评论