我正在尝试在Global.asax Application_Start()事件中使用访问HTTPContext。
var context = HttpContext.Current;
if (context != null)
{
if (context.Request != null) //Getting error here
{
.....
}
}
访问context.Request
时出现'context.Request' threw an exception of type 'System.Web.HttpException'
异常。
在这种情况下,context.Request
不是null,而是抛出异常。
我使用以下代码来识别Request
属性是否存在:
context.GetType().GetProperty("Request");
我得到了以下答复。
{System.Web.HttpRequest Request}
Attributes: None
CanRead: true
CanWrite: false
CustomAttributes: Count = 0
DeclaringType: {Name = "HttpContext" FullName = "System.Web.HttpContext"}
GetMethod: {System.Web.HttpRequest get_Request()}
IsSpecialName: false
MemberType: Property
MetadataToken: 385876876
Module: {System.Web.dll}
Name: "Request"
PropertyType: {Name = "HttpRequest" FullName = "System.Web.HttpRequest"}
ReflectedType: {Name = "HttpContext" FullName = "System.Web.HttpContext"}
SetMethod: null
I am not sure how to confirm if context.Request exists and is not null ?
答案 0 :(得分:1)
如果在HttpRequest对象不可用时尝试使用此属性,则ASP.NET将引发异常。例如,在Global.asax文件的Application_Start方法中或从Application_Start方法调用的方法中,这都是正确的。当时尚未创建HTTP请求。
Application_Start
并不是要处理特定的请求,因此您需要将正在做的事情移到处理程序中以处理不同的事件,例如BeginRequest
。
答案 1 :(得分:0)
public class Global : HttpApplication
{
private static HttpRequest initialRequest;
static Global()
{
initialRequest = HttpContext.Current.Request;
}
void Application_Start(object sender, EventArgs e)
{
//access the initial request here
}
您可以在此处使用Application_Start事件。静态类型是通过HTTPContext中的请求创建的,允许您存储它并在Application_Start事件中立即重用它。