Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC 4应用程序中的自定义身份验证_C#_Asp.net Mvc 4 - Fatal编程技术网

C# ASP.NET MVC 4应用程序中的自定义身份验证

C# ASP.NET MVC 4应用程序中的自定义身份验证,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我正在将旧的ASP.NET Web窗体应用程序迁移到ASP.NET MVC 4。我对ASP.NET MVC不是很熟悉,所以如果这是一个愚蠢的问题,我很抱歉。简而言之,我的ASP.NET Web Forms应用程序在用户登录时使用以下代码行重定向用户: FormsAuthentication.RedirectFromLoginPage(username, true); 我想我可以复制并粘贴代码。但是,我注意到它试图将用户重定向到“default.aspx”。这个调用的MVC等价物是什么 谢谢大家

我正在将旧的ASP.NET Web窗体应用程序迁移到ASP.NET MVC 4。我对ASP.NET MVC不是很熟悉,所以如果这是一个愚蠢的问题,我很抱歉。简而言之,我的ASP.NET Web Forms应用程序在用户登录时使用以下代码行重定向用户:

FormsAuthentication.RedirectFromLoginPage(username, true);
我想我可以复制并粘贴代码。但是,我注意到它试图将用户重定向到“default.aspx”。这个调用的MVC等价物是什么


谢谢大家!

在控制器中的登录方法上添加参数字符串returnUrl

然后检查它是空的还是空的。如果没有重定向

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
       // Do your login
    // if success
                if (!String.IsNullOrEmpty(returnUrl))
                {
                    return Redirect(returnUrl);
                }
}
在您的视图中,还要传递returnUrl(将是Request.Url)


表单身份验证通常提供一个
returnUrl
作为查询字符串参数(我假设
FormsAuthentication.RedirectFromloginPage(username,true)
正在使用该参数)。也就是说,在登录操作中添加一个在
returnUrl
中接收的参数,然后在登录操作中使用该参数

[HttpPost]
public ActionResult Login(LoginViewModel model, String returnUrl)
{
    if (ModelState.IsValid)
    {
        // perform login
        if (YourFormsAuthentication.YourLoginMethod(mode.username, model.password))
        {
            //
            // Set auth cookie, log user in, etc.
            //

            // Now check for returnUrl and make sure it's present and
            // valid (not redirecting off-site)
            if (!String.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
            {
                return Redirect(returnUrl);
            }
            // no returnUrl provided, direct them to default landing page
            return RedirectToRoute("Home");
        }
        else
        {
            ModelState.AddError("", "Username or password are incorrect.");
        }
    }
    return View(model);
}

这里有完整的样本:

具有特定操作的控制器的视图

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Login(YourModel model)
    {
        if (!ModelState.IsValid)
        {
            return View("Login", model);
        }

        return RedirectToAction("Index");
    }

在MVC4中,如果您创建一个新的应用程序并选择Internet应用程序选项,模板将连接所有表单身份验证,并将设置您使用SimpleMembership提供程序,这使得自定义用户配置文件更加容易,并添加了对轻松插入OAuth的支持。您的web.config中应该有以下条目

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

此操作针对由MVC 4 Internet模板创建的默认HomeController。用户体验是,如果他们单击主页上的“联系人”选项卡,但未登录,他们将被重定向到登录页面。一旦他们成功登录,他们将被重定向回联系人页面。因此,MVC4互联网应用程序为您提供了所有连接,您不必显式地处理重定向。有关自定义SimpleMembership提供程序的详细信息

我不熟悉那种特殊的方法
RedirectFromLoginPage
。您是否考虑过使用新的重定向结果(“/my_首页”)?我假设它考虑了
returnUrl
?如果(!String.IsNullOrEmpty(returnUrl)和&Url.islocalur(returnUrl)){return Redirect(returnUrl);}return redirectoroute(“Index”)或类似的内容。@Oliver
RedirectFromLoginPage
删除一个身份验证cookie,然后将此人重定向到查询字符串的
ReturnUrl
参数中指定的位置,否则重定向到defaultUrl。@MikeSmithDev我明白了,这似乎是某种奇怪的复合功能
<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
    [Authorize(Roles="Admin")] 
    public ActionResult Contact()
    {
        ViewBag.Message = "Your contact page.";

        return View();
    }