Приложение ASP.NET4: обратная передача вызывает неожиданное перенаправление - PullRequest
1 голос
/ 18 марта 2011

Я использую сборку инструментария 5.06, и я только начинаю, пытаясь сделать что-то простое: заставить работать обратную передачу.Но когда пользователь нажимает кнопку обратной передачи, браузер быстро перенаправляется на что-то (я думаю, что это uiserver. ???), а затем снова перенаправляется на facebookredirect.axd и, наконец, снова на мою домашнюю страницу холста.Таким образом, весь сеанс в значительной степени сбрасывается.Я надеюсь, что есть что-то очевидное, что я пропускаю (например, я не должен называть авторизацию на обратной передаче?).Вот мой код:

using System;используя System.Configuration;использование System.Web.UI;используя Facebook;использование Facebook.Web;

открытый частичный класс _Default: Page {

/// <summary>
/// Gets the current canvas facebook session.
/// </summary>
public FacebookSession CurrentSession
{
    get { return (new CanvasAuthorizer()).Session; }
}

protected void Page_Load(object sender, EventArgs e)
{

    var auth = new CanvasAuthorizer { Permissions = new[] { "user_about_me" } };

    if (auth.Authorize())
    {
        ShowFacebookContent();
    }
}

private void ShowFacebookContent()
{
    var fb = new FacebookClient(this.CurrentSession.AccessToken);
    dynamic myInfo = fb.Get("me");
    lblName.Text = myInfo.name;
    lblName.Text += myInfo.gender;
    pnlHello.Visible = true;
}


protected void TempSaveButton_Click(object sender, EventArgs e)
{
    var auth = new CanvasAuthorizer { Permissions = new[] { "user_about_me" } };
    if (auth.Authorize())

    {
        var fb = new FacebookClient(this.CurrentSession.AccessToken);
        dynamic myInfo = fb.Get("me");
        lblDisplayText.Text = "Was authorized! name is" + myInfo.name;
    }
    else
    {
        lblDisplayText.Text = "Was not authorized!";
    }
}

}

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">


</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">


<asp:Label runat="server" ID="a" />
<asp:Panel ID="pnlHello" runat="server" Visible="false">    </asp:Panel>
    <h2>
        Hello
        <asp:Label ID="lblName" runat="server" />!
         </h2>   
        <div>Hello ! Please press button to do postback.

<asp:Button ID="TempSaveButton" Text="Temp Save" runat="server" onclick="TempSaveButton_Click"></asp:button>



<asp:Panel ID="pnlError" runat="server" Visible="false">
    <a href="Default.aspx">
        <asp:Label ID="lblDisplayText" runat="server" ForeColor="Red" /><br />
    </a>
</asp:Panel>

(в приведенном выше ярлыкене устанавливается вообще после обратной передачи.

Спасибо за любую помощь ...

-Ben

1 Ответ

1 голос
/ 19 марта 2011

Вам нужно будет поддерживать подписанный запрос вручную для обратных запросов и запросов ajax.

Попробуйте создать скрытое поле ввода, содержащее подписанный запрос.

<input type="hidden" name="signed_request" value="<%: Request.Params["signed_request"]%>"/>

Назовите скрытое поле подписанного запроса.Поэтому, когда вы набираете следующий код, access_token автоматически устанавливается.

var fb = new FacebookWebClient();

Для mvc есть вспомогательный метод для этого.

@Html.FacebookSignedRequest()
...