1

我们目前使用带有 DNN 7.1 站点的 AWS Cloudfront,但在使用需要 __doPostBack 的控件的模块时遇到问题。

通常我们的主站点不使用这样的控件,但我们正在进行改造并希望添加一些确实需要它的新功能。但是,通过 CloudFront 访问时,__doPostBack 永远不会呈现。我们现在所做的是在我们的一个子域上创建一个页面,该页面不在 CloudFront 上,并设置一个 IFrame 来显示它,它可以工作但由于各种原因不太理想。

经过检查,这似乎是由于 Cloudfront 剥离了用户代理并将其替换为“Amazon CloudFront”。

我尝试创建一个似乎可以识别的自定义 .browser 文件,但 Request.Browser 调用仍然显示“未知”。谁能指出我对这个 .browser 文件做错了什么?我知道它仍然需要添加的功能,但“浏览器”设置应该足以至少调用 Request.Browser 显示提供的“Amazon CloudFront”名称而不是“未知”,不是吗?

    <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: 我还尝试将以下内容添加到 web.config 中的 system.web 部分,然后使 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>
4

3 回答 3

0

您是否尝试过将页面上的 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";
}
于 2013-11-13T04:16:39.833 回答
0

万一这仍然会给使用 ASP.NET Web 控件(更具体地说是 __doPostBack)和 CloudFront 的用户带来问题:

CloudFront 将允许您基于每个行为将原始请求(包括用户代理)传递到源。显然这排除了缓存,但应该意味着您的页面可以按需要运行。

为此,请编辑相关行为,并为标题设置选择“全部”。您会注意到设置 TTL 的选项消失了。

使用 Headers 设置,还可以将某些 headers 列入白名单 - 因此您可以仅通过 User-Agent 值指定变化。同样,鉴于用户代理字符串的多样性,这可能会限制缓存对特定行为的有效性。

于 2015-01-30T14:08:12.573 回答
0

好的 - doPostback 看起来有类似的问题,并且在几个月前发布 IE10 时发现了一个未知的用户代理。

为了解决这个问题以及未知用户代理的任何未来问题,Alexandre Alapetite 创建了一个看起来像这样的浏览器文件定义

<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

看看这是否适合你

于 2013-11-19T20:32:24.343 回答