假设我有一个NgSwitchDefault
Cookie,它应该是Currency
或USD
。如果有人手动将其更改为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就不会改变
任何帮助都会受到赞赏并为糟糕的英语道歉。
答案:
SetDefaultCookie()
答案 0 :(得分:3)
我不知道可能是否可以在Controller的构造函数中重定向,但肯定似乎就像一个坏主意。
如果您想在操作之前继续检查每个请求的路径,那么您可能希望查看自定义操作过滤器。网上有很多对它们的引用,但here是couple。
答案 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
希望这可以帮助你。