写了个基控制器BaseController,重写了 OnActionExecuting
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
string sessionId = Request["mysessionid"];
if (!string.IsNullOrWhiteSpace(sessionId))
{
object obj = CacheHelper.Get(sessionId);
currentUser = obj as User;
if (currentUser == null)
{
filterContext.Result = new RedirectResult(passportlogin);
}
CacheHelper.Set(sessionId, currentUser, DateTime.Now.AddDays(7), TimeSpan.Zero);
}
else
{
filterContext.Result = new RedirectResult(passportlogin);
}
base.OnActionExecuting(filterContext);
}
,然后其它的控制继续于它。
访问普通的ActionResult action的时候,如果没有登录,可以正常转向到passportlogin。
前台还有一些ajax功能,如下:
<script type="text/javascript">
function vote(contentid, vote) {
$.post("/a/vote", { "contentid": contentid, "vote": vote }, function (data) {
alert(data);
});
}
</script>
其中a控制器继续于BaseController,vote这个action是JsonResult,发现,如果用户没有登录,并不会发生转向。
JS接收数据肯定是不会跳转的。只会接受到后台passportlogin生成的html。你需要在回调方法中做判断,然后用脚本控制跳转才行呢。
问题是我现在断点跟踪,发现根本不能进入这个vote action,所以没法判断。
@abc54288: 你是不是在这个action上加了[HttpGet]
@幻天芒: 没有加[HttpGet]。在执行action前执行的是OnActionExecuting,所以在OnActionExecuting里已经执行了跳转代码,但是前台是JS不知道怎么跳转了。
前台也接收不到passportlogin的值。
@abc54288: 前台收到的应该是你跳转后的页面内容。如果要坚持这种做法,可以用返回的结果进行文本判断。
@幻天芒: 换成$.ajax(...)解决了。
既然没登录时不会执行到vote,那就在error里弹出吧。
感谢回复。
@abc54288: 另辟蹊径,不失为一种办法...
为什么我用ajax不行呀? 是不是不能用POST