Как написать пользовательский 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: перенаправлять помечать себя). Вот краткая рецензия: 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