Безумный обходной путь, который я сейчас пробую, состоит в том, чтобы ввести наш собственный 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();
Однако на самом деле это не было проверено, поскольку мы не уверены, каково именно влияние этого изменения.