AWS Cloudfront + .NET用户控件=没有呈现_doPostback - 需要自定义.browser文件帮助

时间:2013-11-05 14:14:17

标签: asp.net browser amazon-cloudfront dopostback

我们目前使用AWS Cloudfront w /我们的DNN 7.1站点,但使用需要__doPostBack的控件的模块出现问题。

通常我们的主站点不使用这样的控件,但我们正在进行改造,并希望添加一些需要它的新功能。但是,当通过CloudFront访问时,__ doPostBack永远不会呈现。我们现在所做的是在我们的一个子域上创建一个页面,该页面不在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:我还尝试将以下内容添加到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>

3 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分: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

看看它是否适合你

答案 2 :(得分:0)

在关闭机会时,这仍然会给那些使用CloudFront的ASP.NET Web Controls(更具体地说是__doPostBack)的人带来一个问题:

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

要执行此操作,请编辑相关行为,然后选择标题设置,选择全部&#39;。您会注意到设置TTL的选项会消失。

使用“标题”设置,还可以将某些标题列入白名单 - 因此您只能通过“用户 - 代理”值指定。同样,考虑到各种用户代理字符串,这可能会限制特定行为的缓存效率。