. Веб-сайт .Net 4.0 не может идентифицировать некоторые AppleWebKit браузеры на основе

Мы наблюдаем, как некоторые браузеры Safari не могут выполнить перекрестную аутентификацию нашего веб-сайта после обновления до .NET 4.0 с .NET 3.5.

После долгих исследований выяснилось, что ASP.NET правильно определяет браузеры Safari. ASP.NET идентифицирует некоторые Safari (возможно, другие браузеры на основе WebKit) как 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; + ru-ru) + AppleWebKit / 533.19.4 + (KHTML, + like + Gecko) + Version / 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) + Version / 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="PowershellTemporaryHandler" %>

using System;
using System.Web;
using System.Web.Security;

public class PowershellTemporaryHandler : 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. .

Есть ли у кого-нибудь опыт решения этой проблемы?

15
задан Chris 9 March 2015 в 16:26
поделиться