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 browser
Und dem lokalen Element
zuweisen
private readonly
IBrowserResolver _browser;
|
Mit
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
>-------------
}
|