dotnetopenauth - изменить URL обратного вызова для твиттера? - PullRequest
1 голос
/ 28 января 2011

Я использую библиотеку dotnetopenauth и пытаюсь выяснить, как изменить URL обратного вызова.

Я смотрю на образец файла

public partial class SignInWithTwitter : System.Web.UI.Page {
        protected void Page_Load(object sender, EventArgs e) {
            if (TwitterConsumer.IsTwitterConsumerConfigured) {
                this.MultiView1.ActiveViewIndex = 1;

                if (!IsPostBack) {
                    string screenName;
                    int userId;
                    if (TwitterConsumer.TryFinishSignInWithTwitter(out screenName, out userId)) {
                        this.loggedInPanel.Visible = true;
                        this.loggedInName.Text = screenName;

                        // In a real app, the Twitter username would likely be used
                        // to log the user into the application.
                        ////FormsAuthentication.RedirectFromLoginPage(screenName, false);
                    }
                }
            }
        }

        protected void signInButton_Click(object sender, ImageClickEventArgs e) {
            TwitterConsumer.StartSignInWithTwitter(this.forceLoginCheckbox.Checked).Send();

        }

Так что это все, что нужно для отправки запроса в твиттер (для веб-форм, немного отличающихся для mvc).

Я хотел бы изменить URL-адрес, по которому ответ возвращается (скорее, у меня есть отдельный результат действия.

Теперь кажется, что StartSignInWithTwitter () - это место, где он устанавливает URL.

    /// <summary>
    /// Prepares a redirect that will send the user to Twitter to sign in.
    /// </summary>
    /// <param name="forceNewLogin">if set to <c>true</c> the user will be required to re-enter their Twitter credentials even if already logged in to Twitter.</param>
    /// <returns>The redirect message.</returns>
    /// <remarks>
    /// Call <see cref="OutgoingWebResponse.Send"/> or
    /// <c>return StartSignInWithTwitter().<see cref="MessagingUtilities.AsActionResult">AsActionResult()</see></c>
    /// to actually perform the redirect.
    /// </remarks>
    public static OutgoingWebResponse StartSignInWithTwitter(bool forceNewLogin) {
        var redirectParameters = new Dictionary<string, string>();
        if (forceNewLogin) {
            redirectParameters["force_login"] = "true";
        }
        Uri callback = MessagingUtilities.GetRequestUrlFromContext().StripQueryArgumentsWithPrefix("oauth_");
        var request = TwitterSignIn.PrepareRequestUserAuthorization(callback, null, redirectParameters);
        return TwitterSignIn.Channel.PrepareResponse(request);
    }

Кажется, что трудно получить текущий запрос из контекста. Можно ли как-то переопределить это без меня, фактически изменить эту строку кода и перекомпилировать .dll?

Редактировать На данный момент я внес изменения в .dll - мне действительно не нравится этот способ, так как теперь я получил поддержку пользовательской версии.

    public static OutgoingWebResponse StartSignInWithTwitter(bool forceNewLogin) {
  Uri callback =  MessagingUtilities.GetRequestUrlFromContext().StripQueryArgumentsWithPrefix("oauth_");
    return StartProcess(forceNewLogin, callback);
    }

private static OutgoingWebResponse StartProcess(bool forceNewLogin, Uri callback)
{
    var redirectParameters = new Dictionary<string, string>();
    if (forceNewLogin)
    {
        redirectParameters["force_login"] = "true";
    }
    var request = TwitterSignIn.PrepareRequestUserAuthorization(callback, null, redirectParameters);
    return TwitterSignIn.Channel.PrepareResponse(request);
}

public static OutgoingWebResponse StartSignInWithTwitter(bool forceNewLogin, Uri callback)
{
    return StartProcess(forceNewLogin, callback);
}

Надеюсь, есть другой способ.

1 Ответ

2 голосов
/ 29 января 2011

Я ценю ваше желание не перекомпилировать библиотеки.Но библиотека DotNetOpenAuth.ApplicationBlock - это всего лишь вспомогательная библиотека для DotNetOpenAuth, и она поставляется с исходным кодом, поскольку на самом деле она не предназначена для использования как есть.Ожидается, что вы скопируете и вставите из него исходный код в нужное вам веб-приложение, а остальное выгрузите.Например, нет никаких обещаний обратной совместимости в библиотеке блоков приложений от версии к версии, как в основном файле dotnetopenauth.dll.

Таким образом, если вы обнаружите недостаток в блоке приложения, вы вправе исправить его самостоятельно.

...