Веб-сайт Vanilla .Net 4.0 не может идентифицировать некоторые браузеры на основе AppleWebKit
Мы видим, что некоторые браузеры Safari не могут выполнять перекрестную аутентификацию нашего веб-сайта после обновления до.net 4.0 с.net 3.5.
После долгих исследований выяснилось, что ASP.Net правильно идентифицирует браузеры Safari. ASP.Net идентифицирует некоторые Safari (возможно, другие браузеры на основе AppleWebKit) как Mozilla версии 0.0. Браузеры, которые не поддерживают файлы cookie, фреймы, JavaScript и т. д. В Net 3.5 не возникает проблем с идентификацией этих браузеров.
Мы упростили тестирование до простого обработчика http (работающего на веб-сайте vanilla 4.0), который возвращает только возможности браузера запрашивающей стороны.
Вот несколько пользовательских агентов, которые не могут быть идентифицированы (они определены как Mozilla 0.0):
- Mozilla / 5.0 + (Macintosh; + U +Intel+Mac OS+ + X+10_5_8 + ан-нас)+AppleWebKit/533.19.4+(KHTML,+ как +Gecko)+ версия / 5.0.3 + Safari / 533.19.4
- Mozilla / 5.0 + (Macintosh; + U +Intel+Mac OS+ +X+10_6_2 + ан-нас)+AppleWebKit/531,9+(KHTML,+ как + Gecko)
- Mozilla / 5.0 + (Macintosh; + U +Intel+Mac OS+ +X+10_6_7 + ан-нас)+AppleWebKit/533.20.25+(KHTML,+ как +Gecko)+ версия / 5.0.4 + Safari / 533.20.27
- Mozilla / 5.0 + (Macintosh; + U +Intel+Mac OS+ +X+10_6_6 + ан-нас)+AppleWebKit/533.18.1+(KHTML,+ как + 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.,
У кого-нибудь есть опыт решения этой проблемы?