Пользовательские элементы управления AWS Cloudfront + .NET = _doPostback не отображается — требуется помощь с пользовательским файлом .browser

В настоящее время мы используем AWS Cloudfront с нашим сайтом DNN 7.1, но у нас возникла проблема с модулями, которые используют элементы управления, требующие __doPostBack.

Обычно на нашем основном сайте такие элементы управления не используются, но мы проводим реконструкцию и хотим добавить некоторые новые функции, которые этого требуют. Но __doPostBack никогда не обрабатывается при доступе через CloudFront. На данный момент мы создали страницу в одном из наших поддоменов, которого нет в CloudFront, и настроили IFrame для ее отображения, который работает, но не идеален по разным причинам.

При рассмотрении кажется, что это связано с тем, что Cloudfront удаляет пользовательский агент и заменяет его «Amazon CloudFront».

Я попытался создать собственный файл .browser, который кажется распознанным, но вызов Request.Browser по-прежнему говорит «Неизвестно». Может ли кто-нибудь указать, что я делаю неправильно с этим файлом .browser? Я знаю, что ему все еще нужны добавленные возможности, но настройки «браузер» должно быть достаточно, по крайней мере, для того, чтобы вызов Request.Browser отображал предоставленное имя «Amazon CloudFront» вместо «Unknown», не так ли?

    <browsers>
        <browser id="AmazonCloudFront" parentID="default">
            <identification>
                <userAgent match="Amazon CloudFront" />
            </identification>
            <capture>     
            </capture>
            <capabilities>
                <capability name="browser" value="Amazon CloudFront" /> 
            </capabilities>
        </browser>
    </browsers>

ОБНОВЛЕНИЕ №1: я также попытался добавить следующее в раздел system.web в файле web.config, а затем аннулировал страницы сайта в Cloudfront, но без изменений.

    <clientTarget>
        <add alias="uplevel" userAgent="Amazon CloudFront" />
        <add alias="uplevel" userAgent="amazoncloudfront" />
    </clientTarget>

ОБНОВЛЕНИЕ #2: я также попытался добавить следующее в файл Default.aspx, но это также не дало никакого эффекта. И да, для autoeventwireup установлено значение true.

        <script runat="server">
            protected void Page_PreInit(object sender, EventArgs e)
            {
                // Set client target to specify browser capabilities equivalent to Internet Explorer 6.0 and higher.
                Page.ClientTarget = "uplevel";
            }
        </script>

ОБНОВЛЕНИЕ №3: я попробовал следующее, но __doPostback все еще не отображается.

    <browsers>
     <browser refID="Default">
      <capabilities><!-- To avoid wrong detections of e.g. IE10 -->
       <capability name="cookies" value="true" />
       <capability name="ecmascriptversion" value="3.0" />
      </capabilities>
     </browser>
    </browsers>

ОБНОВЛЕНИЕ № 4: я пробую следующий подход в качестве дробовика и добавляю все самые последние уникальные возможности из других файлов браузера. Это также не вызвало никаких изменений.

    <browsers>
        <browser refID="Default">
            <capabilities>
                <capability name="cookies" value="true" />
                <capability name="w3cdomversion"                   value="1.0" />
                <capability name="javascript"                      value="true" />
                <capability name="ecmascriptversion" value="3.0" />
                <capability name="javascriptversion"               value="1.8" />
                <capability name="layoutEngine"                    value="Gecko" />
                <capability name="supportsAccesskeyAttribute"      value="true" />
                <capability name="javaapplets"                     value="true" />
                <capability name="supportsDivNoWrap"               value="false" />
                <capability name="tagwriter"                       value="System.Web.UI.HtmlTextWriter" />
                <capability name="frames"                          value="true" />
                <capability name="javaapplets"                     value="true" />
                <capability name="supportsCallback"                value="true" />
                <capability name="supportsFileUpload"              value="true" />
                <capability name="supportsMaintainScrollPositionOnPostback" value="true" />
                <capability name="supportsMultilineTextBoxDisplay" value="true" />
                <capability name="supportsXmlHttp"                 value="true" />
                <capability name="tables"                          value="true" />
                <capability name="isColor"              value="true" />
                <capability name="screenBitDepth"       value="8" />
                <capability name="jscriptversion" value="6.0" />
                <capability name="vbscript"             value="true" />
                <capability name="supportsVCard"        value="true" />
                <capability name="maximumRenderedPageSize"         value="300000" />
                <capability name="supportsFontName"                value="true" />
                <capability name="supportsFontSize"                value="true" />
                <capability name="supportsImageSubmit"             value="true" />
                <capability name="supportsItalic"                  value="true" />
                <capability name="supportsBold"                    value="true" />
                <capability name="supportsCss"                     value="true" />
                <capability name="supportsMaintainScrollPositionOnPostback" value="true" />
            </capabilities>
        </browser>
    </browsers>

person CodeConqueror    schedule 05.11.2013    source источник
comment
Привет, CodeConqueror, я столкнулся с той же проблемой с решением .Net, которое использует обратные передачи. Я открыл ветку форума на сайте AWS, чтобы узнать, что думает Amazon: forums.aws.amazon.com/thread.jspa?messageID=503534#503534 Я действительно ненавижу издеваться над Amazon CloudFront как над браузером, предположительно .Net дает нам некоторую пользу, адаптируя свой JavaScript к определенные браузеры. Если мы даже ответим на возможности определенного браузера, другие браузеры могут начать давать сбой? Мне нужно более внимательно прочитать о возможностях браузера, чтобы узнать наверняка. Гог   -  person GogLlundain    schedule 20.11.2013
comment
Да, я согласен, это не тот путь, по которому я ХОЧУ идти, но пока это единственный путь, который я вижу, который может иметь некоторый свет в конце. Единственное, что я могу придумать, это исключить определенную страницу из CloudFront, но я не нашел способа сделать это. Я слежу за твоим постом там и посмотрю, выйдет ли что-нибудь из этого.   -  person CodeConqueror    schedule 20.11.2013


Ответы (3)


Вы пытались проверить, работает ли установка значения clientTarget на странице на «uplevel»?

protected void Page_PreInit(object sender, EventArgs e) {
    // Set client target to specify browser capabilities equivalent to Internet Explorer 6.0 and higher.
    Page.ClientTarget = "uplevel";
}
person user2986086    schedule 13.11.2013
comment
Я пробую это сейчас. У меня нет возможности поместить его в код позади файла, поскольку это сайт DotNetNuke (мне понадобится исходный код, затем перекомпилировать его и сохранить эти изменения как обновления DNN). НО, я просмотрел этот параметр и увидел, что я могу сделать это через раздел System.Web файла web.config. Сейчас пробую, после тестирования отпишусь. Это параметр, который я никогда раньше не использовал и даже не знал, что он делает, поэтому спасибо, что указали на него. - person CodeConqueror; 13.11.2013
comment
К сожалению, без кубиков. Это не имело никакого значения. См. Обновление № 1 в моем исходном посте. - person CodeConqueror; 13.11.2013
comment
Кроме того, в качестве теста я попытался добавить предложенный вами код в файл default.aspx в блоке сценария, но, похоже, это не дало эффекта. См. Обновление № 2 в моем исходном посте. - person CodeConqueror; 14.11.2013

Хорошо - похоже, что аналогичная проблема с doPostback, и неизвестный пользовательский агент был обнаружен, когда IE10 был выпущен несколько месяцев назад.

Чтобы исправить эту и любую будущую проблему с неизвестным пользовательским агентом, Александр Алапетите создал определение файла браузера, которое выглядело следующим образом.

<browsers>
 <browser refID="Default">
  <capabilities><!-- To avoid wrong detections of e.g. IE10 -->
   <capability name="cookies" value="true" />
   <capability name="ecmascriptversion" value="3.0" />
  </capabilities>
 </browser>
</browsers>

http://connect.microsoft.com/VisualStudio/feedback/details/662275/asp-net-user-agent-sniffing-and-ie10-internet-explorer-10

Посмотрите, работает ли это для вас

person user2986086    schedule 19.11.2013
comment
Я беспокоюсь об этом, хотя, если вы скажете .Net, что каждый является определенным браузером, например. IE10, тогда что будет со всеми остальными браузерами (IE ‹ 10, браузеры Webkit и т. д.)? Функция возможностей браузера должна пытаться убедиться, что все браузеры работают, если вы обойдете это обнаружение, у вас могут возникнуть проблемы в других браузерах? - person GogLlundain; 20.11.2013
comment
В его нынешнем виде он использует значение по умолчанию, поэтому, даже если он выдает себя за IE, он не может быть хуже, чем сейчас (что совершенно нефункционально). Я попробую изменить файл браузера и сообщу позже сегодня. - person CodeConqueror; 20.11.2013
comment
Не повезло с этим файлом браузера. Я пытаюсь модифицировать его для Ss и Gs. Смотрите обновления 3 и 4 в моем ОП. - person CodeConqueror; 20.11.2013

На всякий случай это все еще представляет проблему для тех, кто использует веб-элементы управления ASP.NET (точнее, __doPostBack) с CloudFront:

CloudFront позволит вам передать исходный запрос (включая User-Agent) источнику для каждого поведения. Очевидно, что это исключает кеширование, но должно означать, что ваши страницы функционируют как положено.

Для этого отредактируйте соответствующее поведение и для параметра «Заголовки» выберите «Все». Вы заметите, что опция установки TTL исчезла.

Используя параметр «Заголовки», также можно внести в белый список определенные заголовки, поэтому вы можете указать изменение только по значению User-Agent. Опять же, учитывая разнообразие строк User-Agent, это, вероятно, ограничит эффективность кеша для этого конкретного поведения.

person Mark Kelly    schedule 30.01.2015