Сессия истекает на рабочем сервере после нажатия на API календаря Yahoo / Outlook - PullRequest
0 голосов
/ 26 февраля 2019
public async Task<ActionResult> YahooCalendar(int id, string start, string end)
    {
        Event_ViewModel eventDetails = _ieventService.GetEventDetailsById(id);
        DataAccess.event_dates eventObject = new DataAccess.event_dates();
        eventObject.event_date_start = Convert.ToDateTime(start);
        eventObject.event_date_stop = Convert.ToDateTime(end);
        eventObject.event_date_place = eventDetails.event_place;
        string eventInfo1 = eventDetails.event_infotext != null ? eventDetails.event_infotext : eventDetails.event_public_info;
        eventObject.event_date_info = eventDetails.event_name + eventInfo1;

        Session["eventObjYahoo"] = eventObject;
        Session["yahooEventName"] = eventDetails.event_name;
        Session["eventURL"] = Request.ServerVariables["HTTP_REFERER"];
        string clientId = ConfigurationManager.AppSettings["YahooClientId"];
        string clientSecret = ConfigurationManager.AppSettings["YahooClientSecret"];
        string redirectUrl = ConfigurationManager.AppSettings["YahooRedirectURL"];
        var url = "https://api.login.yahoo.com/oauth2/request_auth?client_id="+clientId+"&redirect_uri="+redirectUrl+"&response_type=code&language=en-us";
        return Redirect(url);
    }

    [HttpGet]
    public async Task<ActionResult> YahooAuth(string code)
    {
        DataAccess.event_dates eventObject = (DataAccess.event_dates)Session["eventObjYahoo"];
        string clientId = ConfigurationManager.AppSettings["YahooClientId"];
        string clientSecret = ConfigurationManager.AppSettings["YahooClientSecret"];
        String encoded = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(clientId + ":" + clientSecret));

        var client = new RestClient("https://api.login.yahoo.com/oauth2/get_token");
        var request = new RestRequest(Method.POST);
        request.AddHeader("Authorization", "Basic " + encoded);
        request.AddHeader("content-type", "application/x-www-form-urlencoded");
        request.AddParameter("grant_type", "authorization_code");
        request.AddParameter("redirect_uri", "oob");
        request.AddParameter("code", code);
        IRestResponse response = client.Execute(request);

        string eventStart = Convert.ToDateTime(eventObject.event_date_start).ToString("yyyyMMddTHHmmss");
        string eventStop = Convert.ToDateTime(eventObject.event_date_stop).ToString("yyyyMMddTHHmmss");

        string eventName = Session["yahooEventName"].ToString();
        string eventUrl = Session["eventURL"].ToString();

        var calURL = "http://calendar.yahoo.com/?v=60&TITLE=Eventry&DESC="+eventObject.event_date_info+"&ST="+eventStart+"&ET="+eventStop+"&in_loc="+eventObject.event_date_place";

        return Redirect(calURL);
    }

При нажатии кнопки календаря я захожу в YahooCalendar, где я получаю всю информацию о событии и сохраняю ее в сеансе.затем после авторизации меня перенаправляют в YahooAuth, где я извлекаю значение из сеанса и отправляю его в календарь Yahoo.

Эта функция прекрасно работает на локальном и промежуточном сервере, но на рабочем сервере (действующий сайт) - состояние сеансаистекает срок действия, и я получаю сообщение об ошибке «Объект не установлен в качестве экземпляра объекта».

Кто-нибудь знает, почему он работает в локальной / рабочей среде, а не в оперативном режиме, и как сохранить состояние сеанса в оперативном режиме?Любая помощь будет оценена.

...