Hvordan skrive en tilpasset MVC ActionFilterAttribute som omdirigerer en Facebook-applikasjon

stemmer
2

Jeg trenger et attributt som håndterer godkjenning for mine kontrollere. Dette er for en Facebook-applikasjon, og det er noen hindringer rundt problemet.

Det jeg egentlig trenger er tilsvarende en server.transfer, men selvfølgelig det er ikke et alternativ i ASP.NET MVC. En viderekoblingen fungerer ikke på grunn av måten Facebook bruker programmet.

Er det en måte jeg kan re-rute fra innen en ActionFilterAttribute?

public class FbAuthorize : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!Service.SignedIn())
            RouteToAction(Account, Index); // Fictional method (I wish it existed)
    }
}
Publisert på 03/04/2009 klokken 13:22
kilden bruker
På andre språk...                            


3 svar

stemmer
1

Du kan bare gjengi sam visning med samme data som den handlingen du ønsker å rute til ville ha gjort. Abstract koden for å generere dataene tilbake inn i modellen, og begge metodene kunne bruke det derfra, slik at du reduserer dobbeltarbeid. Dette vil ikke gi deg den samme URL, men det vil gi deg den oppfatning at du ønsker.

Svarte 03/04/2009 kl. 13:30
kilden bruker

stemmer
3

Hvis du bruker facebook utviklerens verktøykasse kan du implementere basepagehelper er LoadFBMLPage metode i en ActionFiler er OnActionExecuting metode. (ellers må du avgi fb: omdirigere tagge deg selv). Her er en kort writeup: http://onishimura.com/2009/04/13/facebook-and-aspnet-mvc/

Svarte 13/04/2009 kl. 07:06
kilden bruker

stemmer
1

Her er din "Server.Transfer ()" eller 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);
  }
}

Nå, i filteret, bare ring:

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

Jubel

Svarte 24/07/2009 kl. 14:56
kilden bruker

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