Asp.net mvc 3 在iFrame中使用ASP.NET MVC 3和Facebook Connect发布HttpPost

Asp.net mvc 3 在iFrame中使用ASP.NET MVC 3和Facebook Connect发布HttpPost,asp.net-mvc-3,facebook-c#-sdk,Asp.net Mvc 3,Facebook C# Sdk,当使用iframe实现Facebook画布应用程序时,iframe会向我的页面发送帖子。这很好,但它会导致激活验证器,从而导致页面上所有输入字段都出现错误 是否无论如何都不能让验证程序通过iframe画布加载初始页面 下面是一个示例代码段: @model My.User @using (Html.BeginForm()) { @Html.TextBoxFor(e => e.FirstName) @Html.ValidationMessageFor(e => e.

当使用iframe实现Facebook画布应用程序时,iframe会向我的页面发送帖子。这很好,但它会导致激活验证器,从而导致页面上所有输入字段都出现错误

是否无论如何都不能让验证程序通过iframe画布加载初始页面

下面是一个示例代码段:

@model My.User

@using (Html.BeginForm())
{
     @Html.TextBoxFor(e => e.FirstName)
     @Html.ValidationMessageFor(e => e.FirstName)

     <input type="submit" />
}
@model My.User
@使用(Html.BeginForm())
{
@Html.TextBoxFor(e=>e.FirstName)
@Html.ValidationMessageFor(e=>e.FirstName)
}

由于Facebook正在向加载到iFrame中的url发送HTTP POST,验证程序被触发。默认情况下,最初关闭验证器。只有一次,当你从facebook获得一个signed_request POST参数时,你才打开它们。

为了使用这个框架而不是进行黑客攻击,我就是这样解决这个问题的。。。我不认为这最终都是因为在使用更大的权限集实现时存在一些问题,如下所述。主要问题是URL长度的限制

首先,当用户点击网站时,我决定根据我自己的一套规则发送他们,但仍然通过URL保存来自Facebook的签名请求

if(Liked)
{
    return RedirectToAction("SimplyAnswerTheQuestion", new { sr = FBSignedRequest });
} else {
    return View(ElitistResponse(BetterThanYouObject));
}

现在的问题是,如果允许您获得有关FB用户的更多信息(如喜欢、朋友等),那么您将没有足够的空间将已签名的请求存储为查询字符串变量。您可以捕获已签名的请求并在重定向之前将其存储,然后在cookie中为用户提供一个令牌,以便在会话的剩余时间内访问数据。

谢谢您的帮助。你是怎么做到的?我不知道有一种方法可以一开始就关闭验证器。我的假设是您编写了将验证器放入表单的代码。因此,在真正需要使用它们之前,您的代码不必将它们放入代码中。该代码段不包括MVC3验证器,它们通常位于类扩展文件上。为了更好地表示,修复了这个问题。请看上面。根据你所说的。。。如果我有15个字段,我将不得不删除所有15个字段的验证器。。。这意味着当用户在客户端填写表单时,它们不会被触发。我可能错过了你想要传达的东西。