2014-09-20 111 views
0

我已經瀏覽了關於Facebook取消授權網址的所有帖子,但他們都沒有解決我的問題。我有一個ASP.Net Web Api 2端點,但我無法讓ping通過。這裏是我的路線簽名是什麼樣子:Facebook取消授權ASP.NET Web API

[AllowAnonymous, Route("FacebookDeauthorize"), HttpPost] 
public async Task<IHttpActionResult> FacebookDeauthorize(string signed_request) 
{ 
    //code for reading it 
} 

這導致了404,所以我試圖改變類型對象和獲取,所以我可以找出它是通過爲即將到來的類型。當我嘗試訪問這個對象時,它拋出了一個空引用異常,所以我認爲它根本沒有通過。由於這是Web API,我無法查看錶單的請求以獲取已簽名的請求。有沒有人成功地得到這個與Web Api一起工作?任何幫助/指針什麼路線簽名應該是?

回答

0

對於其他人誰發現這一點,這裏是asp.net網站API和Facebook的C#SDK工作端點,訣竅是使用一個模型,不是原始:

public class FacebookDeauthModel 
{ 
    public string signed_request { get; set; } 
} 

[AllowAnonymous] 
[Route("FacebookDeauthorize")] 
[HttpPost] 
public async Task<IHttpActionResult> FacebookDeauthorize(FacebookDeauthModel model) 
{ 
    FacebookClient fb = new FacebookClient(); 
    dynamic signedRequest = JsonConvert.DeserializeObject(fb.ParseSignedRequest("YOUR_APP_SECRET", model.signed_request).ToString()); 

    string FBUserID = signedRequest.user_id; 

    ApplicationUser user = UserManager.FindBy(x => x.FBAppID == FBUserID); 
    if (user != null) 
    { 
     user.IsActive = false; 
     user.InactiveReason = "Facebook deauthorized on " + DateTime.UtcNow; 
     await UserManager.UpdateAsync(user); 
    } 
    else 
    { 
     _tracer.Error(Request, "FacebookDeauthorize", "Facebook tried to deauthorize a user we do not have record of, FBAppID: {0}", FBUserID); 
    } 

    return Ok(); 
}