2016-05-13 38 views
7

Tôi đang cố gắng xác định xem trình duyệt có phải là Internet Explorer trong ASP.NET Core ở phía máy chủ hay không.Phát hiện phía máy chủ nếu trình duyệt là Internet Explorer trong ASP.NET Core

Trong phiên bản trước ASP.NET 4 trong cshtml tôi:

@if (Request.Browser.Browser == "IE") 
{ 
    //show some content 
} 

nhưng trong ASP.NET 5/ASP.NET Lõi IntelliSense cho Context.Request không có một lựa chọn cho Browser

tôi có thể có được UserAgent nhưng điều này có vẻ khá phức tạp vì IE có một số loại dây khác nhau

Context.Request.Headers["User-Agent"] 

for Internet Explorer 11.0 Tôi nhận được

Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko 

khiến việc xác định mọi phiên bản IE trước đây, hiện tại hoặc tương lai từ đó trở nên rất khó khăn.

+0

Toàn bộ lý do tại sao đội IE thay đổi chuỗi tác nhân người dùng cho IE11 là để cố gắng * ngừng * người đánh hơi cho IE . Đối với các phiên bản tương lai, họ sẽ thành công với nỗ lực này để kết thúc trình duyệt đánh hơi (tức là bạn sẽ thất bại với nhiệm vụ của mình), hoặc họ sẽ phải thực hiện thêm các thay đổi để đánh bại các kỹ thuật đánh hơi hiện tại của bạn, nếu chúng trở thành phổ biến. –

Trả lời

9

Tôi cảm thấy có nghĩa là tốt nhất nên cố gắng tránh trình duyệt phía máy chủ đánh hơi nếu bạn có thể. Nhưng tôi hoàn toàn nhận ra rằng đôi khi nó có thể hữu ích. Vì vậy ...

Dựa trên danh sách này http://www.useragentstring.com/pages/useragentstring.php?name=Internet+Explorer có vẻ như UserAgent cho hầu như tất cả các phiên bản của Internet Explorer chứa MSIE do đó sẽ là điều chính bạn muốn tìm.

Thật thú vị khi xem qua danh sách đại lý người dùng IE này, tác nhân người dùng bạn quan sát là một trong số rất ít không chứa MSIE. Nếu bạn kiểm tra sự hiện diện của MSIE hoặc Trident trong tác nhân người dùng sẽ hoạt động khá tốt để xác định tất cả các trường hợp của Internet Explorer.

(Trident là máy trình bày rằng quyền hạn Internet Explorer và nó chỉ được sử dụng cho Internet Explorer)

Vì vậy, ví dụ mã để xác định xem trình duyệt IE có thể được viết như sau:

public static bool IsInternetExplorer(string userAgent) { 
     if(userAgent.Contains("MSIE") || userAgent.Contains("Trident")) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

Và điều này có thể được gọi từ bên trong bộ điều khiển như thế này:

string userAgent = Request.Headers["User-Agent"]; 

if(IsInternetExplorer(userAgent)) { 
    //Do your special IE stuff here 

} else { 
    //Do your non IE stuff here 
} 
+0

Tôi liệt kê rằng đối với IE11, nó không chứa MSIE. – greay

+0

Đó là lý do tại sao nó cũng cần thiết để kiểm tra xem các tác nhân người dùng có chứa "Trident" là tốt. Nếu nó chứa "MSIE" hoặc "Trident" thì đó là trình duyệt internet. Tôi đã thêm mã ví dụ vào và thử nghiệm mã trên IE 11. –

+0

@greay - Đừng quên chấp nhận câu trả lời này nếu nó hoạt động cho bạn. Cảm ơn! –

0

Tôi đưa vào một phương pháp mở rộng để đánh giá điều này:

public static bool IsInternetExplorer(string userAgent) 
{ 
    return (userAgent.Contains("MSIE") || userAgent.Contains("Trident")); 
} 

// Extension for Request 
public static bool IsInternetExplorer(this HttpRequestBase req) 
{ 
    return IsInternetExplorer(req.Headers["User-Agent"]); 
} 

Cách sử dụng:

if (Request.IsInternetExplorer()) 
{ 
    // Do something microsofty   
} 

(Dựa trên câu trả lời Ron C)

Các vấn đề liên quan