«context.Request» вызвал исключение типа «System.Web.HttpException» - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь использовать доступ HTTPContext внутри события Global.asax Application_Start ().

        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 - не ноль, а исключение.

Я использовал следующий код, чтобы определить, существует ли свойство 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 ]

1 голос
/ 25 апреля 2019

С документация :

ASP.NET сгенерирует исключение, если вы попытаетесь использовать это свойство, когда объект HttpRequest недоступен.Например, это будет верно в методе Application_Start файла Global.asax или в методе, который вызывается из метода Application_Start.В то время еще не было создано ни одного HTTP-запроса.

Application_Start не предназначен для обработки конкретного запроса, поэтому вам нужно переместить то, что вы делаете, в обработчик для другогособытие, как BeginRequest.

0 голосов
/ 10 мая 2019
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.

...