2017-11-10 2 views
4

Erlauben Sie mir, genauer zu erklären.Wie erkennt das Framework in ASP.NET MVC 5, dass eine POST-Anforderung von einer eigenen Webseite stammt?

Ich habe gelernt und testet um mit ASP.NET MVC 5 mit Visual Studio 2017. Von was ich verstehe, ein Controller "Aktionen" oder Methoden sind entsprechend einem Routenformat in "RouteConfig.cs" zugeordnet, so dass alle öffentlichen Methoden, auf die Webanfragen zugreifen können.

Im Fall einer einfachen GET-Methode, die eine Ansicht zurückgibt, wie diese:

// GET: Movies/Create 
public ActionResult Create() 
{ 
    return View(); 
} 

Ich würde nur die korrekte URL eingeben muß, und ich habe die Ansicht erhalten.

Aber im Falle von sinnvollen POST-Aktionen wie Löschen eines Dateneintrags, wie stellt der Controller sicher, dass die POST-Anfrage eine gültige ist, die von einer seiner eigenen Ansichten statt einer unbekannten Webseite kommt? Mit der Annahme, dass eine Aktion nur auf eine passende Route abgebildet werden muss, die aufgerufen werden soll.

einen Code stammt aus einer von Microsoft Tutorials als Beispiel:

public class MoviesController : Controller 
{ 
    private MovieDBContext db = new MovieDBContext(); 

    /* 
    Bunch of Other GET Actions 
    */ 

    // POST: Movies/Delete/5 
    [HttpPost, ActionName("Delete")] 
    [ValidateAntiForgeryToken] 
    public ActionResult DeleteConfirmed(int id) 
    { 
     Movie movie = db.Movies.Find(id); 
     db.Movies.Remove(movie); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    /* 
    Bunch of Other GET Actions 
    */ 

} 

Wie funktioniert diese Steuerung dieses Ziel zu erreichen? Wenn nicht, wie kann es erreicht werden?

+1

Dies ist alles über 'ValidateAntiForgeryToken'. Sehen Sie sich das Microsoft-Tutorial an. –

+0

@AlexKudryashev ok, vielen Dank, dass Sie darauf hingewiesen haben. – CodeIntern

Antwort

2

Dies ist der Zweck des Anti-Forgery-Tokens, das Sie validieren, indem Sie die Aktionsmethode mit dem Attribut ValidateAntiForgeryToken dekorieren. Ihre Ansicht muss ein Anti-Fälschungs-Token enthalten, das über die Methode @Html.AntiForgeryToken()HtmlHelper

0

validiert werden kann. ValidateAntiForgeryToken führt diese Aufgabe anhand Ihres Beispiels aus. Wenn ein bisschen mehr Erklärung, hat MVC seine eigenen diszipliniert, dass, sobald Sie einen neuen Controller erstellen, der Name "MyTest" ist, Namenskonvention ist MyTestController. Das bedeutet, wenn Sie eine Ansicht für den MyTest-Controller erstellen, sollte ein Ordner mit MyTest unter Ansicht erstellt werden und die Ansichten von MyTest sollten beibehalten werden. Ich hoffe, du würdest meine Erklärung bekommen. Viel Spaß beim Codieren!