2013-05-22 14 views
7

Mam metodę w moim kontroler, który nie chce być nazywany z paska adresu w przeglądarce ...Wyłącz metoda działania z miano z paska adresu

Czy istnieje sposób, aby to zrobić ? Może jakąś adnotację, modyfikację w konfiguracji trasy? Jakie są moje opcje?

+0

Jak wolisz nazwać tę "akcję"? Tylko 'HttpPost'? A może nazwiesz to z poziomu 'Kontrolera'? Czy może to być zwykła metoda zamiast "Akcji"? Myślę, że jedynym sposobem, w jaki będziesz mógł to zrobić, jest użycie atrybutu '[HttpPost]'. – Rohrbs

Odpowiedz

14

Jeśli zamierzasz użyć tej akcji tylko z poziomu kontrolera lub widoków, możesz użyć atrybutu ChildActionOnly.

Jeśli chcesz uzyskać do niego dostęp za pomocą POST, możesz użyć atrybutu [HttpPost].

Ale jeśli chcesz go użyć, używając GET (tj. Używając połączenia AJAX itp.) I nie chcesz, aby użytkownicy mieli do niego dostęp za pomocą paska adresu, możesz wykonać to tutorial, aby wykonać tylko czynności AJAX.

Albo, jeśli chcesz po prostu metodę, która nie jest działaniem w ogóle (czyli nie można wywołać za pomocą protokołu HTTP), a następnie można albo zrobić to private lub użyj [NonAction] atrybut

+0

Chciałbym dodać ChildActionOnly będzie działać tylko z widoków. Jeśli spróbujesz zadzwonić do nich z kontrolera, napotkasz błąd jako * Akcja "Uwierzytelnij" jest dostępna tylko na żądanie dziecka. * –

5

Używaj NonAction atrybut metody.

+1

Czy możesz wyjaśnić ten atrybut, proszę? – Zulu

+0

@Zulu, atrybut należy zastosować do metody kontrolera, która ma być niedostępna jako działanie: zobacz https://msdn.microsoft.com/en-us/library/system.web.mvc.nonactionattribute.aspx . –

Powiązane problemy