我们目前使用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>
答案 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>
看看它是否适合你
答案 2 :(得分:0)
在关闭机会时,这仍然会给那些使用CloudFront的ASP.NET Web Controls(更具体地说是__doPostBack)的人带来一个问题:
CloudFront允许您基于每个行为将原始请求(包括用户代理)传递到原点。显然这会排除缓存,但应该意味着您的页面按照需要运行。
要执行此操作,请编辑相关行为,然后选择标题设置,选择全部&#39;。您会注意到设置TTL的选项会消失。
使用“标题”设置,还可以将某些标题列入白名单 - 因此您只能通过“用户 - 代理”值指定。同样,考虑到各种用户代理字符串,这可能会限制特定行为的缓存效率。