2012-01-21 2 views
2

Быстрый вопрос;Защищенные вызовы ASP.NET MVC для контроллеров

Предоставление контроллера Пользователь и его функция Получить вызов от кого-то;

mydomain.com/user/get и получить доступ к функциям там.

Каковы наилучшие методы, позволяющие только моему приложению иметь возможность называть это?

Благодаря

+0

Какое ваше применение? – epignosisx

ответ

3

облицовочные метод действия с [ChildActionOnly] атрибут гарантирует, что метод действий на контроллере не может быть непосредственно вызывается пользователем, входящего в URL. EG

[ChildActionOnly] 
     public ActionResult _CantNavigateHere() 
     { 
      return View(); 
     } 
+0

Привет, дзюдо, он работает, если вызов выполняется с контроллера. Я вызываю некоторые функции funcitonality от jQuery, используя $ .ajax, и когда я это делаю, если действие контроллера украшено, как вы предложили, я получаю обратно 500 ошибок. Как я могу вызвать это действие из jquery и все еще украсить это? – IGIT

+0

Для сценариев ajax вам необходимо реализовать атрибут [AjaxOnly], здесь есть простая демонстрация http://helios.ca/2009/05/27/aspnet-mvc-action-filter-ajax-only-attribute/. – Judo

+0

Но значит ли это, что любой может назвать это с помощью ajax? – IGIT

0

Вы можете использовать AntiForgeryToken с MVC3 и Ajax.

Вот как я это делаю. (Это не является надежным, конечно, но добавляет еще один уровень безопасности)

На ваш взгляд, в любом месте, выход:

@Html.AntiForgeryToken() 

И в вызове Ajax включают это значение в почтовых переменных, как:

$.post("/Controller/Action/", 
       { 'id': var_id, '__RequestVerificationToken': $("input[name='__RequestVerificationToken']").val() }, 
       function (data) { /* handle request */ }); 

А в вашем контроллере:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Action(int id) {..} 

Помимо этого, вы можете также сделать чек ссылающийся хост и отклонить любой хост, который не соответствует вашему домену. Это может быть подделано, но опять же, это еще один слой для добавления.