Πώς να γράψετε μια προσαρμοσμένη MVC ActionFilterAttribute που ανακατευθύνει την εφαρμογή Facebook

ψήφοι
2

Χρειάζομαι ένα χαρακτηριστικό που χειρίζεται άδεια για τους ελεγκτές μου. Αυτή είναι μια εφαρμογή του Facebook και υπάρχουν μερικά εμπόδια γύρω από το πρόβλημα.

Αυτό που πραγματικά χρειάζεται είναι η ισοδύναμη με ένα server.transfer, αλλά φυσικά αυτό δεν είναι μια επιλογή σε ASP.NET MVC. Μια ανακατεύθυνση δεν θα λειτουργήσει λόγω του τρόπου Facebook καταναλώνει η εφαρμογή.

Υπάρχει ένας τρόπος που μπορώ να ξανά-διαδρομή μέσα από ένα ActionFilterAttribute;

public class FbAuthorize : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!Service.SignedIn())
            RouteToAction(Account, Index); // Fictional method (I wish it existed)
    }
}
Δημοσιεύθηκε 03/04/2009 στις 14:22
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
1

Θα μπορούσε να καταστήσει μόνο την άποψη Sam με την ίδια δεδομένα που η ενέργεια που θέλετε να οδόν προς θα καθιστούσε. Περίληψη του κώδικα για να δημιουργήσει τα δεδομένα πίσω στο μοντέλο και οι δύο μέθοδοι θα μπορούσαν να το χρησιμοποιήσουν από εκεί, έτσι ώστε να μειωθεί η άσκοπη επανάληψη. Αυτό δεν θα σας δώσει την ίδια διεύθυνση URL, αλλά θα σας δώσει την προβολή που θέλετε.

Απαντήθηκε 03/04/2009 στις 14:30
πηγή χρήστη

ψήφοι
3

Εάν χρησιμοποιείτε εργαλειοθήκη του προγραμματιστή του Facebook μπορείτε να εφαρμόσετε τη μέθοδο LoadFBMLPage του basepagehelper στη μέθοδο OnActionExecuting ενός ActionFiler του. (διαφορετικά θα πρέπει να εκπέμπουν το fb: ανακατεύθυνση ετικέτα στον εαυτό σας). Εδώ είναι μια σύντομη writeup: http://onishimura.com/2009/04/13/facebook-and-aspnet-mvc/

Απαντήθηκε 13/04/2009 στις 08:06
πηγή χρήστη

ψήφοι
1

Εδώ είναι «Server.Transfer ()» ή το είδος της:

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

Τώρα, το φίλτρο σας, απλά τηλεφωνήστε:

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

Στην υγειά σας

Απαντήθηκε 24/07/2009 στις 15:56
πηγή χρήστη

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