2009-08-25 69 views
11

我有一个ASP.NET MVC项目,我想为网站的不同区域有不同的LoginUrl。根据网站的区域,输入不同类型的凭证。不同的URL与ASP.NET MVC和表单身份验证不同的LoginUrl

http://host.com/widget/home应该将用户重定向到http://host.com/widget/logon

http://host.com/admin/home应该将用户重定向到http://host.com/admin/logon

到目前为止,最好的解决方案,我想出了,是有窗体身份验证loginUrl =“〜/帐号/登录”,在web.config中:

<authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880"/> 
    </authentication> 

在控制器帐户:

public ActionResult LogOn() 
{ 
    //redirect depending on the returnUrl? 
    string returnUrl = ControllerContext.Controller.ValueProvider["ReturnUrl"].AttemptedValue; 
    if (returnUrl.StartsWith("/widget")) 
    { 
     return Redirect(string.Format("/widget/Logon?ReturnUrl={0}", returnUrl)); 
    } 
    if (returnUrl.StartsWith("/admin")) 
    { 
     return Redirect(string.Format("/admin/Logon?ReturnUrl={0}", returnUrl)); 
    } 
    return View(); 
} 

有没有更好的方法来做到这一点?

+1

顺便说一句:你可以把returnUrl作为字符串参数传递给该方法:LogOn(string returnUrl) – 2011-01-11 01:16:04

回答

1

我知道,你可以在一个网站的子文件夹单独的web.config文件,所以,如果你有一个管理员/文件夹中的实际.aspx页,并且该文件夹中一个web.config,你可以指定该文件夹中的验证网址分开。

我不知道这工作与ASP.NET MVC的路线,你很可能不会有这些子文件夹中的物理文件,但它是值得一试。

+2

在MVC领域,你确实有单独的web.config,但如果你尝试添加认证属性:在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的部分是错误的。此错误可能是由于虚拟目录未被配置为IIS中的应用程序。 – Jafin 2010-09-28 00:43:31

1

为您的操作添加验证属性。

然后在Global.asax中添加Application_AuthenticateRequest然后看发件人和你想要的操作登录重定向那里。

+0

我只是好奇,但这似乎与我原来所做的相似,只是在不同的地方。 这样做的优点是什么? – mlsteeves 2009-08-25 13:31:41

相关问题