Использование токенов Anti-Forgery между страницами MVC и классическими страницами ASP.NET - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть приложение, 80% которого входит в ASP.NET MVC 2. Я использую токен Анти-подделки, чтобы избежать подделки межсайтовых запросов.

Скажите, у меня есть метод действия -

public JsonResult AddMenuFavorite(int id) {
    // code
}

, который использует токен для предотвращения CSRF. У меня есть различные ссылки на моих страницах MVC, и я могу без проблем вызвать этот метод действия.

При совершении вызовов с классических страниц ASP.NET это показывает ошибку.

Reason:: Anti-forgery token is not embedded in ASP.NET pages it seems. 

Может ли кто-нибудь помочь мне с решением?

1 Ответ

2 голосов
/ 28 февраля 2012

Для создания необходимого скрытого поля, содержащего токен, вы можете использовать статический метод AntiForgery.GetHtml:

<%@ Page Language="C#" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <%= AntiForgery.GetHtml() %>
        <asp:LinkButton 
            runat="server" 
            ID="btn" 
            PostBackUrl="~/SomeController/AddMenuFavorite/123" 
            Text="Go to the MVC site" 
        />
    </div>
    </form>
</body>
</html>

И поскольку ваше действие возвращает JSON, я подозреваю, что вы вызываете его с помощью запроса AJAX. В этом случае вы можете использовать значение скрытого поля, созданного помощником, чтобы отправить его вместе с запросом AJAX:

$(function() {
    $('#someLink').click(function() {
        $.post(this.href, $('form').serialize(), function(result) {
            // do something with the result
        });
        return false;
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...