Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

Browser in Asp.Net Core 2 mit Wangkanai

23.04.2018 (👁5928)


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

_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 >-------------

        }