首页 新闻 会员 周边 捐助

ASP.NET MVC页面登陆判断之后怎样才能返回登陆之前输入的URL地址

0
悬赏园豆:50 [待解决问题]

我的页面都做了登陆判断,我写了一个Basecontroller,下面的controller都继承它,实现了登陆之前判断

namespace MVC_DEMO.Controllers
{
    public class BaseController : Controller
    {
        //
        // GET: /Base/
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            if (Session["user"] == null)
            {
                filterContext.Result = Redirect("/Account/Login");
            }
        }
    }
}

但是输入指定页面的URL验证登陆后,跳转的是默认页,怎样可以跳转到之前输入的URL。

sucheng1992的主页 sucheng1992 | 初学一级 | 园豆:10
提问于:2016-05-11 13:42
< >
分享
所有回答(5)
0

我们是这样处理的。

 

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            string path = filterContext.HttpContext.Request.Path;

            var routeValue = new RouteValueDictionary
            {
                {"Controller", "Account"},
                {"Action", "Login"},
                {"ReturnUrl", path}
            };

            filterContext.Result = new RedirectToRouteResult(routeValue);
            return;
        }

 

Dhoopu | 园豆:10 (初学一级) | 2016-05-11 14:07

像我这样用controller继承的方法实现  可以这样写吗

支持(0) 反对(0) sucheng1992 | 园豆:10 (初学一级) | 2016-05-11 14:18

@sucheng1992: 实际就是能取到returnurl就可以了吧.

支持(0) 反对(0) Dhoopu | 园豆:10 (初学一级) | 2016-05-11 14:19

@DysonDu: filterContext.Result = Redirect("/Account/Login?returnurl=/Home/Index");这样写对吗

支持(0) 反对(0) sucheng1992 | 园豆:10 (初学一级) | 2016-05-11 14:44
-1

可以用ajax请求,请求成功的话 return 结果,然后js中判断,if成功,跳转登陆页

心怀宇宙 | 园豆:643 (小虾三级) | 2016-05-11 14:24

我的意思是我比如输入/HOME/INDEX,这不是我没登陆吗,跳转到登录页/HOME/LOGIN,当我完成LOGIN之后返回到我之前输入的/HOME/INDEX该怎么做

支持(0) 反对(0) sucheng1992 | 园豆:10 (初学一级) | 2016-05-11 14:27

@sucheng1992: 我是下面这个意思

$.post("/home/login", parms, loginResponse);
//处理登录的反馈信息
function loginResponse(data) {
    var result = eval("(" + data + ")");
    if (result.state == "success") {
        window.location.href = "/home/index";
    }
    
}

//后台处理
public ActionResult Login()
{
string state = "success";
//验证成功后
return Content(string.Format("{0}\"state\":\"{1}\"", "{", state, "}"));
}

我是上面这个意思
View Code
支持(0) 反对(0) 心怀宇宙 | 园豆:643 (小虾三级) | 2016-05-11 14:37
-3

return RedirectToAction("路径",参数),这个可以么

灵性缺失选手 | 园豆:214 (菜鸟二级) | 2016-05-11 17:16
-2

用一个参数将当前地址传过去

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2016-05-12 19:29
0

上面说有存路由其实都不安全,因为参数,分布式服务器,跨域服务,都会有问题,最好的方式就是跳转到你登陆界面的时候就带上原来的地方(一定要用js取,js取浏览器中的地址才是最准确最安全的,其它的都有可能取错),然后进行登陆,登陆成功,回执一个登陆成功的界面,然后在这个界面里面的<script>中写上setTimeOut,1000毫秒后跳转你之前取的地址location.href="你之前用js取的地址"。这样,从JS取的地址由JS跳转,只是中间走服务器暂存了一圈,才原汁原味!

ensleep | 园豆:1682 (小虾三级) | 2016-06-13 10:52

不在路由里保存的话,js取的地址如何保留到后面的页面的呢,是不是存cookie里?

“中间走服务器暂存一圈”是怎么存的,不懂?

支持(0) 反对(0) Chanty | 园豆:202 (菜鸟二级) | 2016-08-27 11:26

@天婴: 不用保存,直接放在URL里面作为参数带到后台,然后后台再给再回来。之所以不推荐用COOKIE的原因是有的平台有的条件下,是不允许 使用COOKIE的,但是URL只要是WEB都要被支持。

支持(0) 反对(0) ensleep | 园豆:1682 (小虾三级) | 2016-08-31 19:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册