Откуда поступают запрос и ответ в ASP.NET? - PullRequest
1 голос
/ 07 июля 2011

Я чувствую, что это довольно простой вопрос, но я не могу понять это. Я понимаю, как создать веб-запрос с помощью HttpWebRequest, отправить его на сервер и обработать ответ.

В примерах Microsoft ASP.NET, таких как:

protected void Page_Load(object sender, EventArgs e)
{
    StringBuilder sb = new StringBuilder();
    // Get cookie from the current request.
    HttpCookie cookie = Request.Cookies.Get("DateCookieExample");

    // Check if cookie exists in the current request.
    if (cookie == null)
    {
        sb.Append("Cookie was not received from the client. ");
        sb.Append("Creating cookie to add to the response. <br/>");
        // Create cookie.
        cookie = new HttpCookie("DateCookieExample");
        // Set value of cookie to current date time.
        cookie.Value = DateTime.Now.ToString();
        // Set cookie to expire in 10 minutes.
        cookie.Expires = DateTime.Now.AddMinutes(10d);
        // Insert the cookie in the current HttpResponse.
        Response.Cookies.Add(cookie);
    }
    else
    {
        sb.Append("Cookie retrieved from client. <br/>");
        sb.Append("Cookie Name: " + cookie.Name + "<br/>");
        sb.Append("Cookie Value: " + cookie.Value + "<br/>");
        sb.Append("Cookie Expiration Date: " + 
            cookie.Expires.ToString() + "<br/>");
    }
    Label1.Text = sb.ToString();
}

(от http://msdn.microsoft.com/en-us/library/system.web.httpcookie.aspx)

Запрос и ответ уже объявлены и просто существуют.

Я разрабатываю веб-сервис вместо полноценного веб-сайта. Поэтому я не вижу, что запрос и ответ уже определены?

Я не понимаю, почему у меня так много проблем с этим. Я задал похожий вопрос здесь: Как я могу использовать ASP.NET, чтобы проверить, включены ли файлы cookie, не имея веб-страницы? , поэтому я либо упускаю что-то совершенно очевидное, либо проблема, которую я пытаюсь решить очень нестандартный.

Я благодарю вас за любую помощь.

EDIT:

Я пытаюсь сделать что-то вроде этого:

    [WebMethod]
    public bool CookiesEnabledOnClient()
    {
        bool retVal = true;
        var request = (HttpWebRequest)WebRequest.Create("http://www.dealerbuilt.com");
        request.Method = "Head";
        var response = (HttpWebResponse)request.GetResponse();
        HttpCookie Httpcookie = new HttpCookie("CookieAccess", "true");

        response.Cookies.Add(Httpcookie);      
        //If statement checking if cookie exists.

        return retVal;
    }

Но Cookies.Add не примет Httpcookie, и когда я использую обычный файл cookie, он не добавляется.

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Ваша проблема в том, что ваш код выше находится в классе, унаследованном от System.Web.UI.Page .У него есть объекты Request и Response для этого базового класса, и, следовательно, они доступны в вашем производном классе.

Стандартный веб-сервис будет наследоваться от System.Web.Services.WebService .На него не заявлен запрос и ответ.Однако у него есть свойство «Context», представляющее собой объект HTTPContext , который определяет свойства для ответа и запроса.

Я не уверен, какие различия могут быть в этих объектах вСервис по сравнению со стандартной веб-страницей, но я думаю, что основные вещи такие же.И я понятия не имею, почему они не определили их обоих в самом классе WebService ...

1 голос
/ 07 июля 2011

Помните, что в ASP.Net метод Page_Load () (и любой другой метод на веб-странице) является членом класса, и этот класс наследует от другого класса .Список свойств этого базового класса включает в себя Запрос и Ответ .

Что касается последней части вашего вопроса, ищите Context переменная.Он уже определен для вашей веб-службы аналогично тому, как запросы и ответы доступны на веб-странице, и он предоставит вам доступ к этим свойствам, включая любые файлы cookie в запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...