2013-05-22 23 views
7

ich eine Methode in meinem Controller, die ich will nicht aus der Adressleiste im Browser aufgerufen werden ...Disable Aktionsmethode von aus der Adressleiste aufgerufen wird

Gibt es eine Möglichkeit, das zu tun ? Vielleicht eine Art Anmerkung, Änderung in der Routenkonfiguration? Welche Optionen habe ich?

+0

Wie würden Sie es vorziehen, diese 'Aktion' zu nennen? 'HttpPost' nur? Oder nennst du es aus dem 'Controller'? Könnte es sich nur um eine normale Methode anstelle einer "Aktion" handeln? Ich denke, die einzige Möglichkeit, dies zu erreichen, ist die Verwendung des '[HttpPost]' - Attributs. – Rohrbs

Antwort

14

Wenn Sie diese Aktion nur von Ihrem Controller oder Views aus verwenden möchten, können Sie das Attribut ChildActionOnly verwenden.

Wenn Sie mit POST darauf zugreifen möchten, können Sie das Attribut [HttpPost] verwenden.

Aber wenn Sie es benutzen wollen mit GET (das heißt mit etc AJAX aufrufen) und wollen nicht Benutzer darauf zugreifen Adressleiste verwenden, dann können Sie folgen diese tutorial auf Ihre Aktionen AJAX nur zu machen.

Oder, wenn Sie wollen einfach nur eine Methode, die keine Aktion überhaupt ist (das heißt nicht genannt HTTP werden kann), dann können Sie entweder machen private oder [NonAction] Attribut

+0

Ich möchte hinzufügen, dass die ChildActionOnly nur von Ansichten funktioniert. Wenn versucht wird, sie vom Controller aus aufzurufen, tritt ein Fehler auf: * Die Aktion 'Authentifizieren' kann nur von einer untergeordneten Anfrage aufgerufen werden. * –

5

Verwenden NonAction Attribut für das Verfahren verwendet werden.

+1

Können Sie dieses Attribut bitte erklären? – Zulu

+0

@Zulu, das Attribut wird auf die Controller-Methode angewendet, die Sie als Aktion nicht verfügbar machen möchten: siehe https://msdn.microsoft.com/en-us/library/system.web.mvc.nonactionattribute.aspx . –