安全地使用HttpContext.Current

转载 2015年07月08日 16:28:02

<>

安全地使用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 ) {
    // 在这里访问与请求有关的东西。
}

举报

相关文章推荐

ASP.NET多线程下使用HttpContext.Current为null解决方案

原文地址:点击打开链接 多线程或者异步调用中如何访问HttpContext? 前面我还提到在APM模式下的异步完成回调时,访问HttpContext.Current也会返回nu...

线程池动态并安全地中断所有线程不需要使用shutdownnow()同时可以继续添加任务

对于一个线程池如果使用shutdownNow() or shutdown() 方法关闭线程池的话可能会造成不必要的开销,因为有时候我们需要关闭线程池的线程但是之后可能还会继续使用线程池, 因此,最好...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

使用一次性密码解决方案更安全地验证身份

MSDN 杂志 > 主页 > 所有期刊 > 2008 > May >  安全性: 使用一次性密码解决方案更安全地验证身份 安全性 使用一次性密码解决方案更安全地验证身份 Dan Griffin ...

基于visual c++之windows核心编程代码分析(55)使用GoogleUrl方便安全地解析URL

我们在进行google搜索的时候,google为了安全起见,经常对于URL通过谷歌的安全过滤,以过滤网络木马,如下图  下面我们来亲自实践,基于VC++来实现使用GoogleUrl方便安全地解析URL...

如何在C++类中安全地使用多线程中的处理函数

首先我们有必要了解清楚成员函数实际上如何工作的,一个非静态的类成员函数都有一个隐藏起来的参数被推入堆栈之中,当编译器需要处理类的成员变量时,它需要处理类的成员变量时,它需要这个隐藏参数的帮忙。这就是"...

HttpContext.Current

1、System.Web.HttpContext.Current:一般在web应用程序里,你的程序都是为了处理客户端过来的http请求而执行的,当前正在处理的这个请求的一些上下文信息就保存在一个Htt...

HttpContext.Current并非无处不在

了解ASP.NET的开发人员都知道它有个非常强大的对象 HttpContext,而且为了方便,ASP.NET还为它提供了一个静态属性HttpContext.Current来访问它, 今天的博客打算就从...

HttpContext.Current.Cache 和HttpRuntime.Cache的区别

原文:http://blog.csdn.net/qwlovedzm/article/details/7024405 先看MSDN上的解释:       HttpContext.Curren...
  • Joyhen
  • Joyhen
  • 2014-10-22 17:07
  • 1159

System.Web.HttpContext.Current.Cache和System.Web.HttpRuntime.Cache有什么区别?

来自:http://www.cnblogs.com/qiantuwuliang/archive/2009/12/28/1634571.html  System.Web.HttpContext.Cur...

HttpContext.Current

HttpContext.Current并非无处不在 阅读目录 开始无处不在的HttpContextHttpContext.Current到底保存在哪里?HttpContex...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)