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

Asp Net Core: Wie kann man die Meta-Tags nachträglich vom Body im Head anzeigen

24.04.2018 (👁5519)


Aufgabe

Dieses Code Beispiel zeigt, wie man in Asp.Net Core MVC Metatags für Facebook und Google in den Header einer Webseite schreibt.

Das Problem beim Arbeiten mit MVC Webseiten ist, dass die Ausgabeseiten in der Regel aus einer _Layout Seite bestehen, welche in den Body_Content Bereich die eigentliche View-Ausgabe einschreibt.

Dadurch hat man in der eigentliche View.cshtml keinen Zugriff mehr auf den <head> Bereich der Webseite.

Die Meta-Tags müssen aber in den Head-Bereich der Webseite geschrieben werden.

 

Lösung:

Beim Laden der Daten in der Controller-Action kann man die Meta-Daten in einen String zusammenfassen und  diese mit ViewData[] an die Ausgabe übergeben.

Diese ViewData[] sind auch schon beim Aufbau der Webseite in der _Layout Head-Ausgabe vorhanden.

 

Controller-Daten

In der aufgerufenen Action des Controllers fasst man die Daten kurz vor Ausgabe zur View zusammen.

//--< MetaData >--

int lenMax200 = note.Text.Length;

if (lenMax200 > 200) lenMax200 = 200;

string sMetaDescription = note.Text.Substring(0, lenMax200);

String sMetaData = "<meta property=\"og: title\" content=\"" + note.Title + "\" />";

sMetaData += Environment.NewLine + "<meta property=\"og: type\" content=\"website\" />";

sMetaData += Environment.NewLine + "<meta property=\"og: url\" content=\"https://Readdy.net/Notes/Details/" + note.IDNote + " \" />";

sMetaData += Environment.NewLine + "<meta property=\"og: image\" content=\"https://Readdy.net/User_Files/Notes/Images/Image_" + note.IDNote + "_0_blog.jpg\" />";

sMetaData += Environment.NewLine + "<meta property=\"og: site_name\" content=\"Readdy.Net\" />";

sMetaData += Environment.NewLine + "<meta property=\"og: description\" content=\"" + sMetaDescription + "\">";

sMetaData += Environment.NewLine + "";

 

ViewData["MetaData"] = sMetaData;

//--</ MetaData >--

 

 

Ausgabe in der _Layout View

Jetzt muss man nur noch in der globalen _Layout View mit Html.Raw die zwischengespeicherten ViewData[".."] ausgeben

@{

    @Html.Raw(ViewData["MetaData"]);

}

 

 

Ansicht im Browser

Hier sieht man dann die Ausgabe der Meta-Tags im Head-Bereich der Webseite.

Diese kann dann von Facebook und Google gelesen werden

 

Oder in der HTML Source Ansicht

<meta property="og: title" content="das ist mit dem handy" />

<meta property="og: type" content="website" />

<meta property="og: url" content="https://Readdy.net/Notes/Details/81 " />

<meta property="og: image" content="https://Readdy.net/User_Files/Notes/Images/Image_81_0_blog.jpg" />

<meta property="og: site_name" content="Readdy.Net" />

<meta property="og: description" content=" ein neuer Test">

 

 

 

Controller Code Referenz

In diesem Beispiel ist die Erstellung der Meta-Daten vor der Übergabe zur View am Fuß zusammengefasst

// GET: Notes/5

        public async Task<IActionResult> Details(long? ID)

        {

            // -------------< Details > -------------

            if (ID == null)

            {

                return NotFound();

            }

            long IDNote = System.Convert.ToInt64(ID);

 

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

 

            //< Counters and log >

            //Userinfos Content counter and Self

            await UserInfo_Methods.increase_User_SumViews_Self_byIDUser(IDCurrent_User);

            await Counter_Logger.counter_of_View_erhoehen(IDCurrent_User,IDNote);

            await add_LogView(IDCurrent_User,IDNote);

            //</ Counters and log >

 

            //--< Get Note >--

            var note = await _dbContext.tbl_Notes.SingleOrDefaultAsync(m => m.IDNote == IDNote);

            if (note == null)

            {

                return NotFound();

            }

 

            //< check Owner >

            long IDOwner = note.IDUser;

            var owner = await _dbContext.tbl_User_Infos.SingleOrDefaultAsync(u => u.IDUser == IDOwner);

            if (owner  == null)

            {

                return Content("Owner not found");// NotFound();

            }

            //</ check Owner >

 

            //< check User >

            var user = await _dbContext.Users.SingleOrDefaultAsync(u => u.IDUser == IDOwner);

            if (user == null)

            {

                return Content("User not found");// NotFound();

            }

            //</ check User >

            //--</ Get Note >--

 

            //--< Get List of Images >--

            List<Note_Image_Model> list_Images = new List<Note_Image_Model>();

            var dataset_images = _dbContext.tbl_Notes_Images.Where(img => img.IDNote == ID); //EF get records

            //< fill list >

            foreach (Note_Image_Model image in dataset_images)

            {

                list_Images.Add(image);

            }

            //</ fill list >

            //--</ Get List of Images >--

 

            //----< sum and Ref >----

            //< Counters >

            await UserInfo_Methods.increase_User_SumViews_Content_byIDUser(IDOwner );

            //</ Counters >

 

            //--< check Referenz >--

            //< get RefID >

            string sRefPart = Request.Query["r"];

            string sIDReference = "";

            if (Convert_Methods.IsNumeric(sRefPart))

            { sIDReference =sRefPart;}

            else

            {

                sIDReference = Convert.ToString(IDOwner);

            }

            //</ get RefID >

 

            if (sIDReference!="")

            {

                //-< set ref_cookie >

                if (Request.Cookies["r"] == null)

                {

                    //-< new Cookie for 1 day >-

                    CookieOptions options = new CookieOptions();

                    options.Expires = DateTime.Now.AddDays(1);

                    //< save >

                    Response.Cookies.Append("r", sIDReference, options);

                    //</ save >

                    //-</ new Cookie for 1 day >-

                }

                //-< set ref_cookie >

            }

            //--</ check Referenz >--

 

 

            //----</ sum and Ref >----

 

            //--< Likes >--

            bool isLiked = false;

            bool isDisliked = false;

            bool isFollowed = false;

            bool isUser_Follower = false;

            //bool isCommented = false;

            if (IDCurrent_User > 0) {

                Note_Like_Model like = _dbContext.tbl_Notes_Likes.SingleOrDefault(n => n.IDNote == ID && n.IDUser == IDCurrent_User);

                if (like != null) { isLiked = true; }                          

                Note_Dislike_Model dislike = _dbContext.tbl_Notes_Dislikes.SingleOrDefault(n => n.IDNote == ID && n.IDUser == IDCurrent_User);

                if (dislike != null) { isDisliked = true; }

                Note_Follows_Model follow = _dbContext.tbl_Notes_Follows.SingleOrDefault(n => n.IDNote == ID && n.IDUser == IDCurrent_User);

                if (follow != null) { isFollowed = true; }

                User_FollowerModel follower = _dbContext.tbl_User_Followers.SingleOrDefault(n => n.IDUser == IDOwner && n.IDFollower == IDCurrent_User);

                if (follower != null) { isUser_Follower = true; }

            }

            //--</ Likes >--

 

 

            //--< Correct >--

            //note.HTML = Correct_Methods.correct_Out_SQL_Injection(note.HTML);

            //note.Title = Correct_Methods.correct_Out_SQL_Injection(note.Title);

            //note.Folder = Correct_Methods.correct_Out_SQL_Injection(note.Folder);

            //--</ Correct >--

 

            //--</ Correct >--

 

            //--< fill Data >--

            Notes_Detail_DataModel data = new Notes_Detail_DataModel();

            //< base data >

            data.Note = note;

            data.Image_List = list_Images;

            //</ base data >

 

 

            data.Ownername = user.UserName;

            data.has_Profil_Image = System.Convert.ToBoolean( owner.has_Profil_Image);

            data.sumUserFollowers = Convert_Methods.IntNull_to_Int(owner.sumFollowers);

            if (IDOwner == IDCurrent_User) data.Is_Own = true;

            data.IDCurrent_User = IDCurrent_User;

            data.IsFollowed = isFollowed;

            data.IsLiked = isLiked;

            data.IsDisLiked = isDisliked;

            data.IsUserFollower = isUser_Follower;

            //--</ fill Data >--

 

            //--< MetaData >--

            int lenMax200 = note.Text.Length;

            if (lenMax200 > 200) lenMax200 = 200;

            string sMetaDescription = note.Text.Substring(0, lenMax200);

            String sMetaData = "<meta property=\"og: title\" content=\"" + note.Title + "\" />";

            sMetaData += Environment.NewLine + "<meta property=\"og: type\" content=\"website\" />";

            sMetaData += Environment.NewLine + "<meta property=\"og: url\" content=\"https://Readdy.net/Notes/Details/" + note.IDNote + " \" />";

            sMetaData += Environment.NewLine + "<meta property=\"og: image\" content=\"https://Readdy.net/User_Files/Notes/Images/Image_" + note.IDNote + "_0_blog.jpg\" />";

            sMetaData += Environment.NewLine + "<meta property=\"og: site_name\" content=\"Readdy.Net\" />";

            sMetaData += Environment.NewLine + "<meta property=\"og: description\" content=\"" + sMetaDescription + "\">";

            sMetaData += Environment.NewLine + "";

 

            ViewData["MetaData"] = sMetaData;

            //--</ MetaData >--

 

            //< out to view >

            if (Request_Methods.check_Browser_IsMobile(Request) == true)

            {

                return View("details_mobile", data);

            }

            else

            {

                return View("details", data);

            }

            //</ out to view >

            // -------------</ Details > -------------

        }