1

我剛剛創建了一個新的Facebook應用程序,並且所有工作都很好,除了控制器動作從我的應用程序處理「發佈」,使用[FacebookAuthorize]過濾器進行操作;因爲它會創建一個重定向,並且我的所有表單數據都會丟失。你可以看到我所說的,如果你修改本教程中的唯一形式:ASPNET MVC4 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是空的。

+0

爲什麼你需要d方式POST?雖然您可能必須編寫自己的模型聯編程序並訪問這些值,如果您有某些特定要求用POST替換GET –

+0

@KD我需要POST,因爲我需要啓用圖像上載。這僅僅是一個不起作用的例子。 – icesar

回答

4

我找到了答案。關鍵是添加一個名爲「signed_request」的隱藏字段,並用請求中的相同值填充它:

vm.signed_request = Request [「signed_request」];

這是爲什麼?這裏是答案:https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/Microsoft.AspNet.Mvc.Facebook/Authorization/FacebookAuthorizeFilter.cs

FacebookAuthorizeFilter檢查該特定字段,並在未填寫字段時進行重定向。

我這裏進一步說明,並介紹了有用的HTML幫助,爲此目的:My blog post

相關問題