关于c#:从HttpContext获取当前的System.Web.UI.Page吗?

关于c#:从HttpContext获取当前的System.Web.UI.Page吗?

Get current System.Web.UI.Page from HttpContext?

这实际上是一个两部分的问题。 首先,HttpContext.Current是否对应于当前的System.UI.Page对象?

第二个问题(可能与第一个问题有关)是为什么我不能使用以下内容查看当前页面是否实现了接口:

1
2
3
4
5
6
7
8
private IWebBase FindWebBase()
{
    if (HttpContext.Current as IWebBase != null)
    {
        return (IWebBase)HttpContext.Current.;
    }
    throw new NotImplementedException("Crawling for IWebBase not implemented yet");
}

一般情况是某些控件需要知道它们是作为SharePoint Webpart还是作为Asp.Net框架的一部分执行的。

我已经通过要求控件传递对自身的引用并检查控件的Page属性来解决该问题,但是我仍然很好奇为什么上述方法不起作用。

编译器错误是:
无法通过引用转换,装箱转换,拆箱转换,换行转换或空类型转换将System.Web.HttpContext转换为... IWebBase。


否,从MSDN的HttpContext.Current上获取:"获取或设置当前HTTP请求的HttpContext对象。"

换句话说,它是HttpContext对象,而不是Page。

您可以使用以下方法通过HttpContext到达Page对象:

1
2
3
4
5
6
Page page = HttpContext.Current.Handler as Page;

if (page != null)
{
     // Use page instance.
}

您正在寻找HttpContext.Handler。由于Page实现了IHttpHandler,因此您将获得对当前正在执行的页面的引用,您必须将其强制转换,或者至少尝试将其强制转换为所需的特定类型。

HttpContext.Current仅返回HttpContext的单例实例。因此,它不是而且永远不可能是页面。


如果需要当前正在执行的精确页面,则可能需要使用HttpContext.Current.CurrentHandler。例如,发送了对Default.aspx的请求,但是引发了错误,并且您对自定义的ErrorHandler.aspx页面执行了Response.TransferCurrentHandler将返回ErrorHandler.aspx的实例(如果在错误之后调用),而HttpContext.Current.Handler将返回Default.aspx的实例。


请看我的回答:
为什么HttpContext.Current.Handler为null?

也许可以解决您的问题。


推荐阅读

    linux获取地址命令?

    linux获取地址命令?,地址,网络,信息,系统,设备,终端,命令,中心,管理,数字,lin

    linux获取ip命令行?

    linux获取ip命令行?,地址,系统,网络,信息,技术,设备,电脑,服务,手机,管理,配

    linux获取地址命令?

    linux获取地址命令?,地址,网络,信息,系统,设备,终端,命令,中心,管理,数字,lin

    linux无效对象的命令?

    linux无效对象的命令?,软件,系统,单位,网络,管理,术语,检测,电脑,环境,风险,l

    linux上获取网管命令?

    linux上获取网管命令?,地址,系统,网络,信息,电脑,服务,网关,状态,名字,中心,l

    linux命令行获取ip?

    linux命令行获取ip?,地址,系统,代码,信息,电脑,服务,状态,密码,命令,网卡,【L

    linux命令获取主机名?

    linux命令获取主机名?,工作,地址,管理,系统,信息,命令,目录,软件,代码,策略,L

    linux获取网速命令?

    linux获取网速命令?,网络,工具,软件,地址,设备,5G,名称,工作,通讯,分析,linux

    linux变量是一个命令?

    linux变量是一个命令?,系统,信息,变量,名称,官网,地址,环境,代码,地方,命令,$

    linux命令获取时分秒?

    linux命令获取时分秒?,时间,系统,体系,标准,命令,工具,管理,国家,大陆,信息,l

    linux命令获取机器码?

    linux命令获取机器码?,地址,设备,工作,信息,命令,管理,系统,工具,目录,网络,l

    linux获取用户名命令?

    linux获取用户名命令?,系统,密码,信息,地址,名称,代码,命令,用户名,用户,用

    linux获取时间戳命令?

    linux获取时间戳命令?,时间,地址,工作,系统,数字,连续,信息,命令,管理,位置,l

    linux获取目录命令行?

    linux获取目录命令行?,工作,系统,地址,信息,数据,命令,标准,名称,环境,位置,l

    linux的获取ip命令?

    linux的获取ip命令?,地址,网络,系统,信息,设备,终端,技术,命令,数字,名称,lin

    linux只获取ip命令?

    linux只获取ip命令?,地址,网络,系统,信息,设备,数字,终端,命令,电脑,技术指

    linux命令行获取公网?

    linux命令行获取公网?,地址,网络,信息,系统,电脑,命令,终端,状态,名称,通信,

    linux如何获取命令行?

    linux如何获取命令行?,系统,工具,密码,信息,软件,命令,终端,位置,管理,发行,

    linux命令获取进程号?

    linux命令获取进程号?,网络,系统,情况,信息,工具,设备,状态,软件,进程,实时,l

    linux的hz获取命令?

    linux的hz获取命令?,系统,工作,管理,基础,信息,地址,状态,时间,网络,命令,别