在构造函数内重定向

时间:2015-06-10 02:23:58

标签: c# asp.net-mvc

假设我有一个NgSwitchDefault Cookie,它应该是CurrencyUSD。如果有人手动将其更改为GBP,则会恢复为RUB

为了实现这一点,我创建了USD类来继承BaseController,然后我的项目中的每个控制器将继承System.Web.MVC.Controller,在BaseController构造函数中我调用BaseController } 方法。代码如下:

CheckcookieValidity()

我遇到了一些问题,如果调用了public class BaseController : Controller { public BaseController() { If (CheckCookieValidity() == false) { SetDefaultCookie(); } } } public void SetDefaultCookies() { var curr = new HttpCookie("curr"); curr.Value = "USD"; curr.Expires = DateTime.UtcNow.AddDays(2); HttpContext.Current.Response.Cookies.Set(curr); } ,那么在下一页之前cookie就不会改变

  1. 是否可以在构造函数中重定向/刷新页面?
  2. 这是检查Cookie有效性的可接受方式吗?我知道这个问题可以归类为自以为是,但我需要知道是否有更好的方法来实现这一目标。
  3. 任何帮助都会受到赞赏并为糟糕的英语道歉。

    答案:

    SetDefaultCookie()

2 个答案:

答案 0 :(得分:3)

我不知道可能是否可以在Controller的构造函数中重定向,但肯定似乎就像一个坏主意。

如果您想在操作之前继续检查每个请求的路径,那么您可能希望查看自定义操作过滤器。网上有很多对它们的引用,但herecouple

答案 1 :(得分:0)

构造函数可能不是此逻辑的最佳位置。我个人使用Initialize方法来加载自定义AuthUser:

    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);
        // Custom code logic for every controller here
    }

根据蒂姆的建议,也可以推荐一个属性。想到这样的事情:

public class CurrencyCheckAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        // Put your logic and potential redirect here.
    }
}

然后可以全局应用于所有控制器:

[CurrencyCheck()]
public class BaseController : Controller

希望这可以帮助你。