6 Stimmen

Zugriff auf die Aktion nur zulassen, wenn sie von einer bestimmten Aktion umgeleitet wird

Gibt es eine gute Möglichkeit, den Zugriff auf eine Aktion einzuschränken, so dass man nur darauf zugreifen kann, wenn man von einer anderen Aktion weitergeleitet wurde. Zum Beispiel:

    [HttpPost]
    public virtual ActionResult Create(MyViewModel vm)
    {            
        if (ModelState.IsValid)
        {
            // do some work

            return RedirectToAction("CreateSuccess");
        }
        else
        {
            return View(vm);
        }
    }

    public virtual ActionResult CreateSuccess()
    {
        // only allow execution if you were redirected from Action "Create" 
    }

7voto

Andy Rose Punkte 16232

Eine einfache Möglichkeit wäre, ein Flag in TempDaten in der ersten Methode und prüfen Sie, ob das Kennzeichen in der Methode vorhanden ist, zu der umgeleitet wird.
TempData dient zur Übermittlung von Zustandsinformationen zwischen Aktionsanforderungen und ist nur für die Dauer der Anforderung gültig, so dass Sie sich nicht um das Löschen der Daten kümmern müssen.

2voto

Dave Swersky Punkte 34052

Es gibt keine Möglichkeit, die "von"-Aktion zu erfahren, es sei denn, Sie fügen Parameter hinzu, die dies angeben. Am einfachsten ist es, einen "SourceAction"- oder "FromAction"-Parameter hinzuzufügen und ihn in der "Destination"-Aktion zu überprüfen.

1voto

goenning Punkte 6384

Die Frage ist: Warum wollen Sie das tun? Vielleicht gibt es eine bessere Lösung für Ihr Hauptproblem.

Auf jeden Fall können Sie die Eigenschaft HttpContext.Current.Request.UrlReferrer verwenden, um die Url der vorherigen Seite zu überprüfen.

0voto

Robert Koritnik Punkte 100480

Erste Lösung

Sie könnten dies einfach tun:

[HttpPost]
public virtual ActionResult Create(MyViewModel vm)
{            
    if (ModelState.IsValid)
    {
        // do some work
        return this.CreateSuccess();
    }
    else
    {
        return View(vm);
    }
}

[NonAction]
public virtual ActionResult CreateSuccess()
{
    // do what's needed 
}

Diese letzte Methode wird nur von anderen Aktionsmethoden ausgeführt. Sie kann aber nicht per se ausgeführt werden.

Zweite Lösung

Sie könnten dieses Problem lösen, indem Sie ein benutzerdefiniertes Selektorattribut für die Aktionsmethode erstellen, wenn Sie wissen, dass Sie dieses wiederverwenden können. Sie könnten ein benutzerdefiniertes Selektor-Attribut für die Aktionsmethode schreiben, das den Referrer der Anfrage prüft und die entsprechende Methode verwendet.

Lesen Sie über benutzerdefinierte Aktionsselektor-Attribute .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X