Можно ли отключить функцию browserCaps в ASP.NET? - PullRequest
8 голосов
/ 06 октября 2010

Можно ли отключить функцию browserCaps в ASP.NET?

Я хочу, чтобы мой сайт работал надежно и точно так, как он определен для всех браузеров, независимо от их возможностей.

Если их браузер не поддерживает сайт, это их проблема. Мой сайт не должен быть чем-то вроде попытки деградировать, чтобы приспособиться к несуществующему клиенту.

Это очень расстраивает, когда кажется, что паукам не повезло, я думаю, что при сканировании сайта получается меньшая версия сайта, что приводит к кешированию выходного файла для обработки удаленного файла.

Ответы [ 2 ]

2 голосов
/ 01 октября 2014

Безумный обходной путь, который я сейчас пробую, состоит в том, чтобы ввести наш собственный HttpCapabilitiesDefaultProvider, который возвращает статический HttpBrowserCapabilities. Хитрость заключается в том, чтобы всегда возвращать один и тот же объект возможностей, поэтому, вызывая base.GetBrowserCapabilities при использовании IE9, мы использовали Newtonsoft для создания сериализации, и, сохраняя эту строку в исходном коде, мы можем построить объект возможностей, подобный IE9, независимо от какого браузера инициировал запрос.

public class CustomerHttpCapabilitiesProvider : HttpCapabilitiesDefaultProvider
{
    private const string m_IE9Definition = "{\r\n  \"$type\": \"System.Web.Mobile.MobileCapabilities, System.Web.Mobile\",\r\n  \"UseOptimizedCacheKey\":..... ";
    private readonly static Lazy<MobileCapabilities> m_Capabilities = new Lazy<MobileCapabilities>(() => JsonConvert.DeserializeObject<MobileCapabilities>(m_IE9Definition), true);

    public override HttpBrowserCapabilities GetBrowserCapabilities(HttpRequest request)
    {
        return m_Capabilities.Value;
    }
}

и затем назначение провайдера в Application_Start:

HttpCapabilitiesBase.BrowserCapabilitiesProvider = new CustomerHttpCapabilitiesProvider();

Однако на самом деле это не было проверено, поскольку мы не уверены, каково именно влияние этого изменения.

2 голосов
/ 07 октября 2010

Вы можете поместить ClientTarget = "uplevel" в директиву страницы или в Page.Init

<%@ Page ClientTarget="uplevel" ...... %>

или

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles Me.Init
    Page.ClientTarget = "uplevel"
End Sub

Другой вариант - добавить .файл браузера на ваш сайт, в папке App_Browsers (папка Asp.NET по умолчанию).Это должно предназначаться для всего браузера с выражением регулярного выражения и так или иначе отключить нормальное обнаружение браузера, добавляя возможности.Я использую это только для правильного отображения элемента управления Menu в Safari, но точно не знаю, как это сделать для всех выходных данных одновременно.

...