1

我刚刚创建了一个新的 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是空的。

4

1 回答 1

4

我找到了答案。关键是添加一个名为“signed_request”的隐藏字段,并用请求中的相同值填充它:

vm.signed_request = 请求["signed_request"];

为什么呢?这就是答案:https ://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/Microsoft.AspNet.Mvc.Facebook/Authorization/FacebookAuthorizeFilter.cs

FacebookAuthorizeFilter 检查该特定字段并在未填写该字段时进行重定向。

我在这里进一步描述了它,并为此目的引入了有用的 Html 助手:我的博客文章

于 2013-06-26T12:31:12.040 回答