【问题标题】:Facebook C# SDK , .NET MVC , passing parameters to ActionResults with facebook app URLFacebook C# SDK,.NET MVC,使用 facebook 应用 URL 将参数传递给 ActionResults
【发布时间】:2012-02-12 21:52:59
【问题描述】:

我一直在使用 facebook c# sdk 开发 .NET MVC / Azure / SQL Azure / Facebook 应用程序。

花了一段时间,但我似乎让它登录用户,我能够捕获使用该应用程序所需的相关数据。

在不了解应用程序的情况下,用户会经历一个 3 步过程,一旦用户完成该过程,我会将一些生成的数据发送到 twitter api 以发布推文并生成一个缩短的 url 使用Bit.ly api。

然后我让用户可以选择在他们的 Facebook 墙上发帖。我可以将带有正确数据的应用程序发布到用户墙上。

我面临的问题是最后带有 id 的 URL,它假定任何点击它的人都会看到显示与 URL 上的 id 相关的数据的部分视图。

网址看起来像这样 http://apps.facebook.com/myapp/?id=1 我有两个 public ActionResult Index(string 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{


    }

});

问题是从 facebook 画布向 actionresult 传递参数

此 Facebook 应用程序网址 http://apps.facebook.com/myapp/

映射到这样的东西 http://myapp.cloudapp.net/

所以我假设 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
        );

    }

任何人都可以帮助我或建议使用 Facebook 画布 url 和 facebook c# sdk 将参数传递给 MVC 控制器操作结果。

对于我的应用来说,能够根据传递的 id 将用户定向到特定视图/部分视图非常重要。

我是否以正确的方式进行此操作,任何人都可以看到我的方法中的缺陷吗?他们是我缺少的东西还是没有做的事情。

最好的问候

帕特里克

【问题讨论】:

    标签: facebook asp.net-mvc-3 azure facebook-c#-sdk asp.net-mvc-routing


    【解决方案1】:

    我这样做是否正确,任何人都可以看到我的缺陷 方法,他们是我缺少还是不做的事情。

    您似乎正在尝试执行从 http://apps.facebook.com/myapphttp://myapp.cloudapp.net/ 的 AJAX 请求,由于内置浏览器的 same origin policy 限制,这显然是不可能的。它基本上可以防止您发送跨域 AJAX 请求。这是guide,其中涵盖了一些可能的解决方法。

    【讨论】:

    • 好的,所以如果我将它们发送到 http://myapp.cloudapp.net/?id=1 我将如何让用户回到 facebook 中的应用程序,
    • 至少在大部分情况下,达林,你已经回答了这个问题。我会考虑更长时间的解决方案以获得更好的解决方案,我想将用户引导到 facebook 之外并不是那么糟糕。我会尝试更多的东西。谢谢
    • 我终于解决了,问题不是你上面讨论的,虽然它确实让我找到了问题所在。 ajax 调用在同一个域上,` $.get('/Home/GetUniqueView/?id=' + str, function(data6){ $('#contentDiv').html(data6); $('#imgLoading ').css("display", "none"); });请注意与第一个 URL 相比,.NET MVC 路由缺少第一个正斜杠“/”现在它的行为与我预期的一样,
    猜你喜欢
    • 2014-07-06
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多