C# 使用[授权]时如何更改重定向

C# 使用[授权]时如何更改重定向,c#,asp.net-mvc,authorize,C#,Asp.net Mvc,Authorize,我知道更改url[授权]需要您访问。您必须在web.config中编辑此行 <authentication mode="Forms"> <forms loginUrl="~/Account/Login" timeout="2880" /> </authentication> 如果我有两个登录页面,我想将用户从一个控制器重定向到url/f/signin,将另一个控制器的用户重定向到/s/signin怎么办?您可以将loginUrl指向一

我知道更改url[授权]需要您访问。您必须在web.config中编辑此行

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


如果我有两个登录页面,我想将用户从一个控制器重定向到url/f/signin,将另一个控制器的用户重定向到/s/signin怎么办?

您可以将
loginUrl
指向一个适当重定向用户的操作

它看起来像这样:

public class MySpecialLoginController:Controller
{
    public ActionResult Index(string returnUrl)
    {
        if(returnUrl.EndsWith("/foo")) //dirty. you could do better...
        {
            return RedirectToAction("signin","f");
        }
        //etc
    }
}

并且,假设默认路由,
loginUrl
将具有值
“~/MySpecialLogin”

,但需要额外重定向,我能想到的解决这个问题的最简单方法是用一个决定用户所属类别的操作替换
loginUrl
,然后将其重定向到相应的登录操作。您需要将
returnUrl
作为重定向操作的字符串参数(即,
loginUrl
指向的操作)。初始身份验证重定向将在查询字符串中提供此值。您可以对其进行反向工程,以发现用户来自何处。如何将字符串参数传递给web.config?当aspnet auth确定用户无权访问页面时(假设它是
foo/bar
),它使用类似于
?returnUrl=foo%2fbar
的查询字符串重定向到
loginUrl
,这样在您登录后,您就可以返回到您所处的位置。简而言之,它是自动填充的。嗯,它似乎应该可以工作,但实际上不行?我在f控制器中做了一个名为Redirector的操作(字符串ReturnUrl),我在其中放了一个断点,但即使此url显示/f/重定向器,它也没有输入?ReturnUrl=%2fF%2fprofileperson%3fid%3d21&id=21不要紧,因为我使用的是httppost。效果很好!Thx