Wie kann man den Browser ermitteln in Asp.Net Core 2 und ermitteln, ob es sich um ein Mobile Device handelt.
.Net Framework, alt
Zunächst einmal gibt es in Asp.Net Core keine Abfrage auf dem Server mehr wie in Asp.Net Framework.
In asp.net MVC .Net-Framework und Webforms konnte man noch den Clientbrowser untersuchen mit
System.Web.HttpContext.Current.Request.Browser.IsMobileDevice |
Deshalb kann man mit 3 MÜglichkeiten die Fähikgeiten des Web-Clients auswerten.
Mit den Nuget-Packages: 51Degrees kostenpflichtig, mit Wangkanai oder man kann einfach den Request.Headers.UserAgent auslesen und selbst auswerten.
Hier die Browser-Erkennung mit Wangkanai
Damit man den Browser mit Wangkanai erkennen kann, muss man das Nuget Package Wangkanai.Detection.Browser installieren.
Unter den Nuget Package Manager findet man mehrere Einträge fßr Wangkanai und kann hier das Wangkanai.Detection.Browser installieren.
Das Nuget Package Detection Browser muss unter Dependencies->Nuget als Wangkanai.Detection.Browser installiert sein.
Anschliessend muss man in der Datei aspnetcore->startup.cs im Bereich ConfigureServices()
Die Zeile services.AddDetectionCore() und .AddBrowser einfĂźgen.
// Add detection services. services.AddDetectionCore() .AddBrowser();
|
Ergebnis aus:
((Wangkanai.Detection.Collections.Safari)test)._agent
mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/66.0.3359.117 safari/537.36 |
Leider ist das Ergebnis falsch, wie man sieht, denn der Browser ist in wirklichkeit ein Chrome browser
clientBrowser.Type="Safari" ist falsch.
Getestet wurde der Asp.Net Core 2 Code mit Visual Studio und als Test-Browser: Chrome auf Windows 10
Asp.Net Core 2 : Controller->Initialisierung
Einbindung von Wangkanai Browser Detection
Im Using-Bereich muss man Wangkanai.Detection hinzufĂźgen.
Dann die Initialisierung-Zeile des AspNetCore Controllers erweitern mit
, IBrowserResolver browserUnd dem lokalen Element zuweisen
private readonly IBrowserResolver _browser; |
Mit
_browser = browser; |
Kopfbereich-Code des Controller
////using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkCore; using Readdy.Data; using Readdy.Models; using System.Security.Claims; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting; using System.IO; //delete File, move using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.ViewFeatures; using System; //Convert using Wangkanai.Detection;
namespace Readdy.Controllers {
public class NotesController : Controller {
#region Controller Init private readonly ApplicationDbContext _dbContext; private readonly IHostingEnvironment _hostingEnvironment; private readonly IBrowserResolver _browser; public NotesController(ApplicationDbContext dbContext, IHostingEnvironment hostingEnvironment, IBrowserResolver browser) { //----< Init: Controller >---- _dbContext = dbContext; _hostingEnvironment = hostingEnvironment; _browser = browser; //----</ Init: Controller >---- } #endregion
|
Im Controller->Action
Browser-Abfrage
Zur Laufzeit kann man dann im Controller in der angesprochenen Asp.Net Core Action den Browser abfragen wie hier..
// GET: /Note Root public async Task<IActionResult> Index_All() { ///-------------< Index_All >------------- //--< Get User ID >-- //internal referenz-Number for tracking in tables long IDCurrent_User = await UserInfo_Methods.getIDUser_as_Number(this.User,_dbContext ) ; //--</ Get User ID >--
//< Own_Views_logger > await Counter_Logger.counter_Note_List_erhoehen(IDCurrent_User); //</ Own_Views_logger >
//--< Get Linq.Query >-- //*gets last 10 Notes with View_Sum var query = (from n in _dbContext.tbl_Notes join u in _dbContext.Users on n.IDUser equals u.IDUser join s in _dbContext.tbl_User_Sums on n.IDUser equals s.IDUser
where n.IsDraft==false orderby n.IDNote descending select new { n, u.UserName,u.has_Profil_Image,u.sumFollowers, s.intSumViews_Others }).Take(30); //--</ Get Linq.Query >--
//----< fill Data_to_View >---- List<Notes_Index_DataModel> dataList = new List<Notes_Index_DataModel>(); //---< @Loop: Rows >--- foreach (var row in query) { //--< Row to Data >-- //< correct > string sShort = row.n.Text; if (sShort.Length > 255) { sShort = sShort.Substring(0, 255); }
row.n.Text = sShort; //</ correct >
//< Data > Notes_Index_DataModel item = new Notes_Index_DataModel(); item.Note = row.n; item.Ownername = row.UserName; item.has_Profil_Image = System.Convert.ToBoolean(row.has_Profil_Image); item.sumFollowers = row.sumFollowers; item.sumViews = row.intSumViews_Others; //</ Data >
//< add > dataList.Add(item); //</ add > //--</ Row to Data >-- } //---</ @Loop: Rows >--- //----</ fill Data_to_View >----
//< data to view > Notes_Index_View_DataModel dataView = new Notes_Index_View_DataModel(); dataView.IDCurrent_User = IDCurrent_User; dataView.List_Notes_with_Owner = dataList; //</ data to view >
//< out to view >
var test = _browser.Browser; return View("index_all", dataView); //</ out to view > ///-------------</ Index_All >------------- }
|