ASPNET MVC4 Facebook приложение - Facebook Авторизовать фильтр и публиковать данные

Я только что создал новое приложение для Facebook, и все работает отлично, кроме действий контроллера, которые обрабатывают "публикацию" из моего приложения с фильтром [FacebookAuthorize] для действия; так как он создает перенаправление и все мои данные формы теряются. Вы можете понять, о чем я говорю, если вы измените единственную форму, представленную в этом руководстве:

http://www.asp.net/mvc/tutorials/mvc-4/aspnet-mvc-facebook-birthday-app

<form class="navbar-form pull-right" action="@Url.Action("Search", "Home")" 
method="get">
                  <input class="span2" type="text" name="friendName" placeholder="Friend's name" />
                  <button type="submit" class="btn">Search</button>
                </form>

Если я изменю метод формы на "публикацию", параметр в моем методе поиска в контроллере больше не будет заполнен. Я провел некоторое исследование по этому вопросу, и кажется, что фильтр FacebookAuthorize создает перенаправление и теряет все пост-данные. Как сделать обходной путь, или я делаю что-то не так?

Действие здесь:

[FacebookAuthorize]
    [HttpPost]
    public async Task<ActionResult> Search(string friendName, FacebookContext context)
    {
        return null;
    }

Когда я размещаю точку останова внутри, я вижу, что параметр friendName пуст.

1 ответ

Решение

Я нашел ответ. Ключ заключается в том, чтобы добавить скрытое поле с именем "signature_request" и заполнить его тем же значением из запроса:

vm.signed_request = Запрос ["signature_request"];

Почему это так? Здесь лежит ответ: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/Microsoft.AspNet.Mvc.Facebook/Authorization/FacebookAuthorizeFilter.cs

FacebookAuthorizeFilter проверяет это конкретное поле и выполняет перенаправление, если поле не заполнено.

Я описал это здесь и представил полезный Html помощник для этой цели: мой пост в блоге

Другие вопросы по тегам