Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何从HttpRequest检查操作的属性_Asp.net Mvc 3_Jquery - Fatal编程技术网

Asp.net mvc 3 如何从HttpRequest检查操作的属性

Asp.net mvc 3 如何从HttpRequest检查操作的属性,asp.net-mvc-3,jquery,Asp.net Mvc 3,Jquery,我遵循这一点是为了尝试优雅地处理来自ajax的重定向。但是,我需要能够确定某些属性是否正在装饰这个调用所针对的操作,因为我只想在某些情况下这样做。我是否可以从此方法中可访问的HttpRequest对象获取此信息 基本上是从上面的代码中提取我想要处理的部分: public class SuppressFormsAuthenticationRedirectModule : IHttpModule { private void OnPostReleaseRequestState(object s

我遵循这一点是为了尝试优雅地处理来自ajax的重定向。但是,我需要能够确定某些属性是否正在装饰这个调用所针对的操作,因为我只想在某些情况下这样做。我是否可以从此方法中可访问的HttpRequest对象获取此信息

基本上是从上面的代码中提取我想要处理的部分:

public class SuppressFormsAuthenticationRedirectModule : IHttpModule {

  private void OnPostReleaseRequestState(object source, EventArgs args) {
      var context = (HttpApplication)source;
      var response = context.Response;
      var request = context.Request; // request is HttpRequest

      if (response.StatusCode == 401 && request.Headers["X-Requested-With"] == 
        "XMLHttpRequest") {

        // TODO HERE:  Check that the controller action contains a particular attribute
        //             and if so do not suppress redirect
        SuppressAuthenticationRedirect(context.Context);
      }
  }
  }
更新:
可能值得注意的是,此代码保存在编译的DLL项目中,然后合并到主机MVC应用程序中(我们无权访问)。在这种情况下,除非我能够确保更改默认实现不会影响应用程序中的其他控制器,否则我实际上无法访问这些实现。

我尝试使用尽可能多的框架,这就是为什么我选择从DefaultControllerFactory公开GetControllerType方法。您会注意到routeData包含区域、控制器和操作,因此通过一些反射,您可以绕过创建派生控制器工厂的过程

这绝对不是生产准备。这只是一种从请求的操作中获取自定义属性的方法

编辑:创建新的DerivedControllerFactory,而不是设置当前控制器工厂

var httpApplication = (HttpApplication)sender;
var httpContext = new HttpContext(httpApplication.Request, new HttpResponse(new StringWriter()));
var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));
//var factory = ControllerBuilder.Current.GetControllerFactory() as DerivedControllerFactory;
var factory = new DerivedControllerFactory();
var controllerType = factory.GetControllerType(new RequestContext(new HttpContextWrapper(httpContext), routeData), routeData.Values["controller"].ToString());
var methodInfo = controllerType.GetMethod(routeData.Values["action"].ToString());
var attributes = methodInfo.GetCustomAttributes(true);  

public class DerivedControllerFactory : DefaultControllerFactory
{
   public new Type GetControllerType(RequestContext requestContext, string controllerName)
   {
      return base.GetControllerType(requestContext, controllerName);
   }
}

干杯,巴里。这显然是一个选择。不幸的是,这段代码是共享应用程序的一部分,所以我对更改默认控制器工厂有点厌倦,除非我能确保它只影响我拥有的控制器。。。。我不确定这是否可行?我修改了上面的代码,以避免必须设置当前控制器工厂。