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

相关问题