2

我需要一个属性来处理我的控制器的授权。这是针对 Facebook 应用程序的,围绕该问题存在一些障碍。

我真正需要的是等价于 aserver.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)
    }
}
4

3 回答 3

3

如果您使用的是 facebook 开发人员的工具包,您可以在 ActionFiler 的 OnActionExecuting 方法中实现 basepagehelper 的 LoadFBMLPage 方法。(否则你必须自己发出 fb:redirect 标签)。这是一个简短的文章:http: //onihimura.com/2009/04/13/facebook-and-aspnet-mvc/

于 2009-04-13T07:06:21.533 回答
1

您可以使用与要路由到的操作相同的数据来渲染 sam 视图。将生成数据的代码抽象回模型中,两种方法都可以从那里使用它,从而减少重复。这不会为您提供相同的 URL,但会为您提供所需的视图。

于 2009-04-03T13:30:12.640 回答
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");

干杯

于 2009-07-24T14:56:01.770 回答