如何在asp.net mvc 3登录后将用户重定向回到他所在的位置

Soo*_*ead 4 c# login asp.net-mvc-3

我正在学习ASP.NET MVC3,我现在正在研究用户处理.我的第一个问题是(我知道在其他主题中有很多关于这个主题的内容,我只是找不到一个很好的MVC3)我希望登录页面重定向我来自我的地方,或者我从哪里重定向.在PHP中,也许我会将这个url添加到查询字符串中.但我需要一种方法以某种方式自动执行此操作,这是一种非常常见的设计模式,我想知道是否有"内置"方式来执行此操作.

什么是最干净,或首选的方式?

此外,当我重定向到登录页面时,这将是检查和存储我重定向的URL的最佳方式?我会在请求对象中检查引用者并将其在URL中吐出"?redirect = protected.html",但我甚至不确定如何正确执行此操作.

关于这个问题的任何建议将不胜感激.

Luk*_*dge 6

MVC的工作方式与ASP.NET相同.

如果您使用表单身份验证,那么很多问题都将为您解答.

在Web Config中找到所说的行,authentication="Windows"然后将其更改为Forms

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

MVC 3实际上会为您提供Account/LogOn路由作为MVC 3模板项目的一部分(检查您的模型,看看您是否有一个被调用AccountModel).

然后,您只需添加Authorization拒绝所有用户到您的网站:

<authorization>
  <deny users="?"/>
</authorization>
Run Code Online (Sandbox Code Playgroud)

默认情况下,这会将访问您网站的任何人发送到您的登录信息.

因此,在验证登录凭据是否正确后,您将设置AuthCookie与ASP.NET相同:

FormsAuthentication.SetAuthCookie(userName, false);
Run Code Online (Sandbox Code Playgroud)

从此形式,您可以重定向到您想要的任何地方.

重定向回到你来自的地方:

FormsAuthentication.RedirectFromLoginPage(userName, false);
Run Code Online (Sandbox Code Playgroud)

不要忘记另一个有用的陈述:

FormsAuthentication.SignOut();
Run Code Online (Sandbox Code Playgroud)

如果没有身份验证,站点将不允许您在任何地方访问,直到您登录,因此CSS将停止工作.

我添加的位置以确保不会发生这种情况如下:

<location path="Content">
 <system.web>
  <authorization>
    <allow users="?"/>
  </authorization>
 </system.web>
</location>
<location path="Scripts">
 <system.web>
  <authorization>
    <allow users="?"/>
  </authorization>
 </system.web>
</location>
Run Code Online (Sandbox Code Playgroud)