我们发现,从 .net 3.5 升级到 .net 4.0 后,一些 Safari 浏览器无法对我们的网站进行交叉验证。
经过大量调查,结果发现是 ASP.Net 无法正确识别 Safari 浏览器。ASP.Net 将某些 Safari(可能是其他基于 AppleWebKit 的浏览器)识别为 Mozilla 版本 0.0。不支持 cookie、框架、javascript 等的浏览器。.Net 3.5 在识别这些浏览器时没有任何问题。
我们已经将测试简化为一个简单的 http 处理程序(在 vanilla 4.0 网站上运行),它仅返回请求者的浏览器功能。
以下是几个无法识别的 User-Agent(它们被识别为 Mozilla 0.0):
- Mozilla/5.0+(Macintosh;+U;+Intel+Mac+OS+X+10_5_8;+en-us)+AppleWebKit/533.19.4+(KHTML,+like+Gecko)+版本/5.0.3+Safari/533.19.4
- Mozilla/5.0+(Macintosh;+U;+Intel+Mac+OS+X+10_6_2;+en-us)+AppleWebKit/531.9+(KHTML,+like+Gecko)
- Mozilla/5.0+(Macintosh;+U;+Intel+Mac+OS+X+10_6_7;+en-us)+AppleWebKit/533.20.25+(KHTML,+like+Gecko)+版本/5.0.4+Safari/533.20.27
- Mozilla/5.0+(Macintosh;+U;+Intel+Mac+OS+X+10_6_6;+en-us)+AppleWebKit/533.18.1+(KHTML,+like+Gecko)
处理程序代码如下所示:
<%@ WebHandler Language="C#" Class="TemporaryHandler" %>
using System;
using System.Web;
using System.Web.Security;
public class TemporaryHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
HttpBrowserCapabilities hbc = context.Request.Browser;
context.Response.Write("Type=" + hbc.Type + "<br>");
context.Response.Write("Name=" + hbc.Browser + "<br>");
context.Response.Write("Version=" + hbc.Version + "<br>");
context.Response.Write("Major Version=" + hbc.MajorVersion + "<br>");
context.Response.Write("Minor Version=" + hbc.MinorVersion + "<br>");
context.Response.Write("Platform=" + hbc.Platform + "<br>");
context.Response.Write("Is Beta=" + hbc.Beta + "<br>");
context.Response.Write("Is Crawler=" + hbc.Crawler + "<br>");
context.Response.Write("Is AOL=" + hbc.AOL + "<br>");
context.Response.Write("Is Win16=" + hbc.Win16 + "<br>");
context.Response.Write("Is Win32=" + hbc.Win32 + "<br>");
context.Response.Write("Supports Tables=" + hbc.Tables + "<br>");
context.Response.Write("Supports cookies=" + hbc.Cookies + "<br>");
context.Response.Write("Supports VBScript=" + hbc.VBScript + "<br>");
context.Response.Write("Supports Frames=" + hbc.Frames + "<br>");
context.Response.Write("Supports JavaScript=" + hbc.EcmaScriptVersion.ToString() + "<br>");
context.Response.Write("Supports Java Applets=" + hbc.JavaApplets + "<br>");
context.Response.Write("Supports ActiveX Controls=" + hbc.ActiveXControls + "<br>");
context.Response.Write("User Agent=" + context.Request.UserAgent + "<br>");
}
}
我们对互联网上没有提到这个问题感到困惑。似乎我们需要将浏览器定义添加到 framework/config/browsers 文件夹或网站级别的 App_Browsers 文件夹中,但奇怪的是,我们需要调整浏览器定义才能使 .net 4.0 网站正常运行。
有人对这个问题有经验吗?