Come scrivere un costume MVC ActionFilterAttribute che reindirizza un'applicazione Facebook

voti
2

Ho bisogno di un attributo che gestisce l'autorizzazione per i miei controllori. Questo è per un'applicazione Facebook e ci sono un paio di ostacoli che circondano il problema.

Quello che ho veramente bisogno è l'equivalente di un server.transferma, naturalmente, che non è un'opzione in ASP.NET MVC. Un reindirizzamento non funziona a causa del modo in cui Facebook consuma l'applicazione.

C'è un un modo per ri-percorso all'interno di un ActionFilterAttribute?

public class FbAuthorize : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!Service.SignedIn())
            RouteToAction(Account, Index); // Fictional method (I wish it existed)
    }
}
È pubblicato 03/04/2009 alle 14:22
fonte dall'utente
In altre lingue...                            


3 risposte

voti
1

Si può solo rendere la vista sam con gli stessi dati che l'azione che si desidera calcolare l'itinerario avrebbe reso. Estratto il codice per generare i dati indietro nel modello ed entrambi i metodi potrebbe usarlo da lì in modo da ridurre la duplicazione. Questo non vi darà lo stesso URL, ma vi darà la visualizzazione che si desidera.

Risposto il 03/04/2009 a 14:30
fonte dall'utente

voti
3

Se si sta utilizzando Developer Toolkit facebook è possibile implementare il metodo LoadFBMLPage del basepagehelper nel metodo OnActionExecuting di un ActionFiler. (altrimenti dovrete emettere la fb: reindirizzare tag su te stesso). Ecco un breve resoconto scritto: http://onishimura.com/2009/04/13/facebook-and-aspnet-mvc/

Risposto il 13/04/2009 a 08:06
fonte dall'utente

voti
1

Qui è la vostra "Server.Transfer ()" o di tipo:

public static class ServerHelper {

  public static void Transfer(ActionExecutingContext filterContext, string url) {

    // Rewrite path
    HttpContext.Current.RewritePath(GetPath(filterContext, url), false);

    IHttpHandler httpHandler = new System.Web.Mvc.MvcHttpHandler();

    // Process request
    httpHandler.ProcessRequest(HttpContext.Current);
    filterContext.HttpContext.Response.End();
  }

  private static string GetPath(ActionExecutingContext filterContext, string url) {
      HttpRequestBase request = filterContext.HttpContext.Request;

      UriBuilder uriBuilder = new UriBuilder(request.Url.Scheme, request.Url.Host, request.Url.Port, request.ApplicationPath);

      uriBuilder.Path += url;

      return filterContext.HttpContext.Server.UrlDecode(uriBuilder.Uri.PathAndQuery);
  }
}

Ora, nel filtro, basta chiamare:

ServerHelper.Transfer(filterContext, "Account/Index");

Saluti

Risposto il 24/07/2009 a 15:56
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more