Ответ IIS 7.5 не содержит setCookie, когда User-Agent = CasperJS

Заголовок HTTP, отправленный CasperJS, содержит:

...
 - User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) CasperJS/1.0.2+Phantomjs/1.8.2 Safari/534.34
...

Ответ не содержит значения SetCookie!

Когда я меняю пользовательский агент вручную:

PageSettings: {
        userAgent: "User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"
    }

Все работает нормально. Я использую ASP.Net MVC.

Как это исправить на стороне сервера?


person Igor Shubin    schedule 05.03.2013    source источник
comment
я чувствую, что это могут быть возможности браузера.   -  person Daniel A. White    schedule 05.03.2013


Ответы (2)


Вероятно, это связано с тем, что среда выполнения определяет возможности вашего браузера на основе заголовка пользовательского агента. Попробуйте отключить это так (или аналогично), чтобы попробовать, если это поможет:

  // Global.asax.cs
  void Application_OnBeginRequest( object sender, EventArgs e )
  {
         HttpApplication app = ( HttpApplication )sender;
         HttpContext ctx = app.Context;

         ...
         if (
              ctx.Request != null &&
             !string.IsNullOrEmpty( ctx.Request.UserAgent ) &&
              ctx.Request.UserAgent.Contains( "CasperJS" )
             )
             ctx.Request.Browser.Adapters.Clear();
         ..
  }     

Фрагмент выше не обязательно является хорошей идеей — он полностью удаляет адаптер рендеринга (что может быть не очень хорошо!) для некоторых браузеров, но он должен стать хорошей отправной точкой для чего-то более необычного.

Я надеюсь, что это поможет, мы смогли решить некоторые проблемы с рендерингом фрагмента, и я надеюсь, что это также поможет решить проблему с файлами cookie.

person Wiktor Zychla    schedule 05.03.2013
comment
Как я уже писал, это отправная точка. Вы можете точно настроить его в соответствии с вашими требованиями. Например, вы можете попытаться выборочно включить поддержку файлов cookie для этого конкретного агента. - person Wiktor Zychla; 05.03.2013

Я нашел решение здесь: https://stackoverflow.com/a/4816391/1010404

Я поместил generic.browser в папку App_Browsers. Файл содержит:

<browsers>
  <browser refID="Default">
    <capabilities>
      <capability name="cookies" value="true" />
    </capabilities>
  </browser>
</browsers>

И все нормально работают.

person Igor Shubin    schedule 05.03.2013
comment
Это также не может быть хорошей идеей, поскольку это безоговорочно включает файлы cookie. Ты уверен, что хочешь этого? - person Wiktor Zychla; 05.03.2013
comment
Да. Это исправлено в ASP.NET 4.5, и предполагается, что все браузеры поддерживают файлы cookie, поэтому дополнительный файл .browser не потребуется. - person Igor Shubin; 05.03.2013