0

我一直在使用facebook c#sdk處理.NET MVC/Azure/SQL Azure/Facebook應用程序。Facebook C#SDK,.NET MVC,將參數傳遞給ActionResults與Facebook應用程序URL

花了一段時間,但我似乎讓它登錄用戶,無法捕獲使用該應用程序所需的相關數據。

沒有進入應用程序,用戶需要經歷3個步驟的過程,一旦用戶進入過程結束,我將一些生成的數據發送到twitter api以發佈推文並生成縮短的url使用Bit.ly api。

然後我給用戶發佈到他們的facebook牆上的選項。我可以通過正確的數據將應用程序發佈到用戶牆上。

我面對的問題是,在最終的id上設置的URL會讓任何人將其點擊到一個局部視圖上,從而在URL上顯示相關數據。

URL看起來像這樣的http://apps.facebook.com/myapp/?id=1 我有兩個公共的ActionResult指數(字符串ID),一個帶有參數(POST)&一個沒有(GET)

`

[Authorize] 
[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index() 
{ 
    ViewData["Message"] = "Welcome to The My App Website!"; 
    ViewData["id"] = "null"; 
    try 
    { 
    var facebookId = long.Parse(User.Identity.Name); 
    var user = InMemoryUserStore.Get(facebookId); 
    var client = new FacebookClient(user.AccessToken); 
    dynamic me = client.Get("me"); 
    ViewData["accessToken"] = user.AccessToken.ToString(); 
    ViewData["FirstName"] = me.first_name; 
    ViewData["LastName"] = me.last_name; 
    ViewData["Email"] = me.email; 
    ViewData["uid"] = facebookId.ToString(); 


    } 
    catch (Exception) 
    { 
    throw; 
    } 

    return View(); 

} 

`

[Authorize] 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Index(string id) 
    { 
     ViewData["Message"] = "Welcome to My App!"; 
     ViewData["id"] = id; 

     try 
     { 
      var facebookId = long.Parse(User.Identity.Name); 
      var user = InMemoryUserStore.Get(facebookId); 
      var client = new FacebookClient(user.AccessToken); 
      dynamic me = client.Get("me"); 
      ViewData["accessToken"] = user.AccessToken.ToString(); 
      ViewData["FirstName"] = me.first_name; 
      ViewData["LastName"] = me.last_name; 
      ViewData["Email"] = me.email; 
      ViewData["uid"] = facebookId.ToString(); 


     } 
     catch (Exception) 
     { 
      throw; 
     } 

     return View(); 
    } 

在使用JQuery我這樣做的索引頁,

'

$(document).ready(function() { 
var str = "@ViewBag.id"; 

if(str != "null" || str != null){ 

       $('#imgLoading').css("display", "inline"); 
       $('#side').css('display', 'none'); 
       $('#contentDiv').html(""); 
       $.get('home/GetUniqueView/?id=' + str, function (data6) { 

       $('#contentDiv').html(data6); 
       $('#imgLoading').css("display", "none"); 

       }); 

    }else{ 


    } 

}); 

問題是傳遞參數給的ActionResult從Facebook的帆布

這個Facebook應用程序URL HTTP://apps.facebook.com/myapp/ < <這將是航線/首頁/索引

映射到這樣的事情 HTTP://myapp.cloudapp.net/ < <這將是路徑/首頁/指數

這樣的IM假設http://apps.facebook.com/myapp/?id=1映射到http://myapp.cloudapp.net/?id=1

在我的Global.asax頁

`

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

    } 

誰能幫助我或建議將參數傳遞給MVC控制器動作結果與Facebook的畫布網址& facebook c#sdk。

它對我的應用程序來說很重要,能夠根據傳遞的ID將用戶導向到特定的視圖/部分視圖。

我是否以正確的方式開展工作,任何人都可以在我的方法中看到缺陷,並且是他們即將失去或不在做的事情。

問候

帕特里克

回答

0

我要對這個正確的方式,任何人都可以看到一個缺陷在我 的做法,是他們的事我在想念或者不這樣做。

你似乎在試圖執行一個AJAX請求從http://apps.facebook.com/myapphttp://myapp.cloudapp.net/這顯然是不可能的,因爲在same origin policy限制內置的瀏覽器。它基本上阻止你發送跨域AJAX請求。這裏有一個guide,它涵蓋了一些可能的解決方法。

+0

好了,如果我將它們發送到http://myapp.cloudapp.net/?id=1 我怎麼才能到用戶返回到Facebook中的任何想法, – Lismore 2012-02-12 22:02:59

+0

至少大部分達林應用,你已經回答了這個問題。 爲了更好的解決方案,我會考慮解決方案稍久一點,我認爲將用戶引導出Facebook並不是那麼糟糕。我會嘗試更多的事情。 謝謝 – Lismore 2012-02-12 22:07:54

+0

我終於解決了它, 這個問題不是你上面討論的,雖然它確實讓我找到了問題所在。 Ajax調用是在同一個域, ' $獲得( '/主頁/ GetUniqueView /?ID =' + STR,功能(DATA6){ $( '#contentDiv')。HTML (data6); $('#imgLoading')。css(「display」,「none」); }); 注相比,1日1 URL時,.NET MVC路線失蹤的第一個正斜槓「/」 Notw它是作爲我預期表現, – Lismore 2012-02-13 03:46:16

相關問題