【问题标题】:MVC Exception to JavaScript RerouteJavaScript 重新路由的 MVC 异常
【发布时间】:2017-03-22 12:21:22
【问题描述】:

我需要创建一个异常,它将从我的 MVC 视图重新路由到登录屏幕。

routes.MapMvcAttributeRoutes();
  routes.MapRoute(
    name: "Login",
    url: "{controller}/{action}/{id}",
    defaults: new {controller = "Account", action = "Login", id = UrlParameter.Optional }
  );

由于某种原因,当它是一个 javascript 请求时,它不能在 MVC 中完成。

【问题讨论】:

    标签: javascript c# asp.net-mvc


    【解决方案1】:

    我认为@Gupta 正在尝试做的事情如下:

    public class MyNewClass : MyBaseClass
    {
        public MyExceptionClass() : base()
        {
            //other stuff here
        }
    }
    
    public class MyBaseClass : Controller {
      private bool isRoute;
      private bool isAuthenticated;
    
      MyBaseClass(){
        isReroute = MethodCheckReroute();
        isAuthenticated = MethodCheckAuth();
    
        if (isReroute || !isAuthenticated) {
          Response.RedirectToRoute("Login");
          throw new System.Web.Http.HttpResponseException(
          new HttpResponseMessage(HttpStatusCode.ExpectationFailed));
       }
    }
    

    【讨论】:

      【解决方案2】:

      这就是我在我的应用上所做的:

      int errorCode = 9999;         
      if (isReroute) {
        this.Response.StatusCode = errorCode;
        Response.RedirectToRoute("Login");
        throw new System.Web.Http.HttpResponseException(
            new HttpResponseMessage(HttpStatusCode.ExpectationFailed));
      }
      

      this.Response.StatusCode 使用您的路由配置并将页面重定向到所需的视图。

      【讨论】:

        【解决方案3】:

        在我的代码中,我创建了一个具有初始化方法的基本控制器,该方法在未通过身份验证时重定向到登录。

        你可以用不同的方式写同样的东西,它会起作用。

        public class BaseController :Controller
        {
           protected override void Initialize(System.Web.Routing.RequestContext requestContext)
                {
                    base.Initialize(requestContext);
                    Test(); check the user
                }
        }
        
        public class TestController : BaseController
        {
        }
        

        在基本控制器中,您可以编写适用于整个应用程序的代码。

        【讨论】:

        • 你能举个例子说明你是怎么做到的吗?
        • base 初始化后如何访问其他控制器?这是持续检查吗?
        • 您可以访问所有 HttpContext、RequestContext 和 ControllerContext。请记住,在控制器的 actionresult 之前它是火。对于后控制器代码,您需要使用 ActionFilterattribute。
        • @AnirudhaGupta 我没关注,你能写一些代码吗。
        • 您在谈论使用 ActionFilter 属性。我想要一个你正在尝试做的例子。
        猜你喜欢
        • 2012-10-06
        • 1970-01-01
        • 2020-01-07
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 2015-07-15
        • 1970-01-01
        相关资源
        最近更新 更多