如何从 C# App_Code 类中获取当前页面的 URL?

5

我有一个日志类,用来记录各种信息。我想要添加自动记录当前页面的功能。

有没有方法可以获取我需要的信息?

谢谢。

4个回答

6

从你的类中,你可以使用HttpContext.Current属性(在System.Web.dll中)。从那里,你可以创建一系列的属性:

底层对象是一个Page对象,所以如果你将它转换为该对象,然后使用任何你通常从Page对象内使用的对象,例如Request属性。


1
真的没有必要进行强制类型转换,HttpContext有一个可直接访问的请求属性。 - blowdart
@blowdart,你说得对。我知道我想要表达什么,但是没有表达清楚。我已经编辑过了 - 更好了吗? - Rebecca Chernoff
这种情况下,底层对象可能不是页面,自定义处理程序也不会将其公开为页面,它取决于映射,因此,如果日志记录从不公开上下文作为页面的处理程序内部调用,则强制转换将失败 - 因此最好避免在日志记录上下文中使用它,或者至少在检查中包装它。 - blowdart

2

1
public static class MyClass
{
    public static string GetURL()
    {
        HttpRequest request = HttpContext.Current.Request;
        string url = request.Url.ToString();
        return url;
    }
}

我试着把它分解一下 :)


0

过去我也曾自己编写日志记录类并使用 Console.Writeln(),但实际上已经存在许多优秀的日志记录选项,那么为什么要重新造轮子呢?我几乎在所有地方都使用 NLog;它非常灵活,具有各种日志输出目标,包括控制台和文件,有大量的日志格式选项,并且针对各种 .net 框架版本设置起来非常简单。运行安装程序将向 Visual Studio 的添加新项目对话框中添加 NLog 配置文件选项。在代码中使用很简单:

// declare in your class
private static Logger logger = LogManager.GetCurrentClassLogger();

...

// use in your code
logger.Debug(() => string.Format("Url: {0}", HttpContext.Current.Request.Url));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接