Cum de a scrie un obicei MVC ActionFilterAttribute care redirecționează o aplicație Facebook

voturi
2

Am nevoie de un atribut care se ocupă de autorizare pentru controlerele mele. Aceasta este o aplicație Facebook și există câteva obstacole din jurul problemei.

Ceea ce am cu adevărat nevoie este echivalent cu un server.transferdar, desigur , că nu este o opțiune în ASP.NET MVC. O redirecționare nu va funcționa din cauza modului Facebook consumă aplicația.

Există un un mod în care pot re-rută din interiorul unui ActionFilterAttribute?

public class FbAuthorize : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!Service.SignedIn())
            RouteToAction(Account, Index); // Fictional method (I wish it existed)
    }
}
Întrebat 03/04/2009 la 14:22
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
1

Ai putea face doar vizualizarea Sam cu aceleași date pe care acțiunea pe care doriți să direcționați către s-ar fi făcut. Rezumat codul pentru a genera datele înapoi în model și ambele metode ar putea folosi de acolo, astfel încât să reducă duplicarea. Acest lucru nu vă va da aceeași adresă URL, dar vă va da punctul de vedere pe care doriți.

Publicat 03/04/2009 la 14:30
sursa de către utilizator

voturi
3

Dacă utilizați setul de instrumente dezvoltator Facebook vă puteți pune în aplicare metoda LoadFBMLPage basepagehelper în metoda OnActionExecuting unui ActionFiler lui. ( în caz contrar va trebui să emită FB: redirecționare etichetează - te). Iată o scurtă writeup: http://onishimura.com/2009/04/13/facebook-and-aspnet-mvc/

Publicat 13/04/2009 la 08:06
sursa de către utilizator

voturi
1

Aici este „Server.Transfer ()“ sau un fel de:

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);
  }
}

Acum, în filtrul, trebuie doar să sunați:

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

Noroc

Publicat 24/07/2009 la 15:56
sursa de către utilizator

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