Hoe u een aangepaste MVC ActionFilterAttribute dat een Facebook-applicatie omleidingen schrijven

stemmen
2

Ik heb een attribuut dat de vergunning handvatten voor mijn controllers. Dit is voor een Facebook-applicatie en er zijn een paar hindernissen rondom het probleem.

Wat ik echt nodig is het equivalent van een server.transfer, maar dat is natuurlijk geen optie in ASP.NET MVC. Een omleiding zal niet werken vanwege de manier waarop Facebook verbruikt de applicatie.

Is er een manier kan ik re-route vanuit een ActionFilterAttribute?

public class FbAuthorize : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!Service.SignedIn())
            RouteToAction(Account, Index); // Fictional method (I wish it existed)
    }
}
De vraag is gesteld op 03/04/2009 om 14:22
bron van user
In andere talen...                            


3 antwoorden

stemmen
1

Je kon gewoon maken de sam weergave met dezelfde gegevens die de actie die u wilt route naar zou hebben gemaakt. Abstract de code om de gegevens terug in het model te genereren en beide methoden kunnen gebruiken vanaf daar, zodat je het dubbel werk te voorkomen. Dit zal niet geven u dezelfde URL, maar het zal u van mening dat u wilt.

antwoordde op 03/04/2009 om 14:30
bron van user

stemmen
3

Als u gebruik maakt toolkit van de Facebook-ontwikkelaar kunt u de basepagehelper's LoadFBMLPage methode in een ActionFiler's OnActionExecuting methode uit te voeren. (anders moet je de fb uitstoten: redirect tag jezelf). Hier volgt een kort writeup: http://onishimura.com/2009/04/13/facebook-and-aspnet-mvc/

antwoordde op 13/04/2009 om 08:06
bron van user

stemmen
1

Hier is uw "Server.Transfer ()" of type:

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

Nu, in uw filter, bel:

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

Proost

antwoordde op 24/07/2009 om 15:56
bron van user

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