2017-10-23 2 views
0

Ich versuche, Benutzerprofile basierend auf URL zu erstellen. Ich weiß, wie paramaters von URL wie www.domain.com/profile?id=username bekommen, aber ich würde es gerne SEO freundlich und stattdessen erhalten Wert von URL-Format: www.domain.com/profile/usernameASP.NET MVC Razor, generieren Profil mit URL/Profil/{Benutzername}

Ich benutze MVC Razor von Visual Studio 2017 und entblößt MSSQL-Datenbank, stattdessen implementiert MySQL mit einer Benutzertabelle.

Meine Gedanken, wie es funktionieren sollte. Benutzer Besuche Webseite www.domain.com/profile/user235

die Server lädt die Steuerung und bekommt den Eingang „user235“

sendet die Steuerung die Eingabe an die .cshtml Seite und der Seite .cshtml Führt Abfrage an die MySQL-Datenbank aus, um das Benutzerdatenarray zu erhalten und die Seite mit den Daten zu füllen.

Sind meine Gedanken richtig? Irgendwelche Ratschläge oder Vorschläge, wie ich damit umgehen soll?

EDIT: Fand die Lösung bei: https://docs.microsoft.com/en-us/aspnet/web-pages/overview/routing/creating-readable-urls-in-aspnet-web-pages-sites

@UrlData [0] .ToString()

Dieser beliebigen Wert erhalten wird nach/in Rasierapparat Seiten Beispiel: profile.cshtml hat Zeichenfolge username = @UrlData [0] .ToString()

www.domain.com/profile/John

@UrlData [0] .ToString() = "John"

Wenn Sie so etwas wie www.domain.com/profile/John/blog43

String username = @UrlData [0] .ToString() String blogid = @UrlData [1] .ToString()

Und mit diesen Informationen können Sie die Datenbank abfragen, um Informationen zu erhalten ... Stellen Sie sicher, den Benutzernamen und Blog-Eingabe für jede Art von SQL-Injektionen zu validieren.

Antwort

1

Sie eine Route Definition definieren, wie die

Hier SEO freundliche URLs zu erhalten ist, wie Sie es tun mit dem Attribut

public class ProfileController : Controller 
{ 
    [Route("Profile/{userId}")] 
    public ActionResult Index(string userId) 
    { 
     return Content("Proile for " + userId); 
    } 
} 
Routing

So, wenn Benutzer Zugriff /yourSite/profile/scott die Index-Aktion des Profil-Controller wird ausgeführt werden und der Benutzername-Wert aus der URL (Scott) wird in der UserId-Parameter der Aktionsmethode verfügbar sein. Hier gebe ich einfach eine Zeichenfolge "Profil für Scott" zurück. Sie können es jedoch abgleichen, um Ihre Datenbank abzufragen, um den entsprechenden Datensatz abzurufen, und diese Informationen mithilfe eines Ansichtsmodells an eine Ansicht weiterzugeben.nur

Wenn Sie Razor Seiten verwenden, werden Sie eine Profilseite erstellen und es ist Modell und geben Sie die Route

@page "{id:int}" 
@model ProfileModel 
@{ 
    ViewData["Title"] = "Profile"; 
}  
<h3>@Model.Message</h3> 

Und in Ihrem Profile.cshtml.cs

public class ProfileModel : PageModel 
{ 
    public string Message { get; set; } 

    public void OnGet(string id) 
    { 
     Message = "Profile of "+ id; 
    } 
} 

Wie ich bereits erwähnt, ich bin Drucken einer Zeichenfolge mit dem übergebenen Benutzernamen von der URL. Aber Sie können es ändern, um Ihre Daten aus Ihrer db-Tabelle zu erhalten.

+0

Vielen Dank für Ihre Antwort, ich bin mir nicht sicher, welche MVC Version ich benutze, aber ich bin nicht in der Lage Controller nur eine Web API Controller Class (v2.1) hinzuzufügen. Wenn Sie Ihren Code verwenden, erkennt er ihn nicht. –

+0

Was Sie meinen, Sie können einen Controller nicht hinzufügen? Wenn Sie Visual Studio verwenden, können Sie mit der rechten Maustaste klicken und eine neue Klasse hinzufügen. Was hält dich auf ? – Shyju

+0

Ich bin neu in ASP.NET und wählte die Standard MVC Razor Vorlage, es gibt keinen Controller Ordner und lässt mich keinen Controller hinzufügen. Ich kann .cs Klassen in App_Code Gedanken hinzufügen. aber wird es es als Controller erkennen und laden? –