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 помощник для этой цели: мой пост в блоге