'context.Request'引发了'System.Web.HttpException'类型的异常

时间:2019-04-24 20:42:55

标签: c# .net asp.net-web-api .net-4.5 httpcontext

我正在尝试在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 ?

2 个答案:

答案 0 :(得分:1)

来自the documentation

  如果在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事件中立即重用它。