编号:ylbtechASPnetMvc100010013Mvc4Security
ASP.net MVC 4 下利用 System.Web.Security.FormsAuthentication类,验证用户的状态(匿名|已登录 )
以项目为例:在视图和和区域里的视图,分别都列举俩个页面(允许匿名和不允许匿名)。
ASP.net MVC 4 下System.Web.Security.FormsAuthentication类,验证用户的状 态(匿名|已登录)
4.1,匿名状态下()
4.1.1 /Home/Index 网站首页

4.1.2 /Account/Login 登录

4.1.3 只要是匿名用户,单击加“[NM]”修饰的地址,都会跳转到/Accout/Login页面

4.2,已登录状态下
4.2.1 /Accout/Index 用户中心

5.1, /web.config 设置重定向登录页面
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
5.2, /Controllers/AccountController.cs 账户管理控制器 ylb_tip:1, 加“[Authorize]”修饰的方法拒绝匿名。
ylb_tip:2, 提示如果是"HttpPost" 提交,则Request["param"])则再也获取不了值。
ylb_tip:3, 在返回"ReturnUrl"的时候与以前的不同。
using System.Web.Mvc;
using System.Web.Security;
namespace Mvc4Security.Controllers
{
public class AccountController : Controller
{
[Authorize]
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult Login()
{
if (! string .IsNullOrEmpty(Request[ "ReturnUrl" ]))
{
string returnUrl = Request[ "ReturnUrl" ];
ViewData[ "ReturnUrl" ] = returnUrl;
}
if (Session[ "Username" ] != null )
{
return RedirectToAction( "Index" );
}
else
{
return View();
}
}
[HttpPost]
public ActionResult Login( string username, string userpass, string returnUrl)
{
if (username == "sunshine" && userpass == "m123" )
{
FormsAuthentication.SetAuthCookie(username, false );
Session[ "Username" ] = username;
if (returnUrl.Trim().Length!=0)
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction( "Index" );
}
}
else
{
ViewData[ "Tip" ] = "用户名或密码有误!" ;
return View();
}
}
[HttpGet]
public ActionResult Logout()
{
Session.Abandon();
FormsAuthentication.SignOut();
return RedirectToAction( "Index" , "Home" );
}
}
}
|
5.3 /Controllers/HomeController.cs 首页控制器(注:区域里面的权限原理相同,在这儿就不多介绍)
using System.Web.Mvc;
namespace Mvc4Security.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult VipIndex()
{
return View();
}
}
}
|
5.4 /Account/Login
登录页面
5.5 /Global 不同:有划分出了“Application_Start”方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
namespace Mvc4Security
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
}
|
5.6.1 /App_Start/RouteConfig.cs 不同:这里的路由参数必须是键值对。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace Mvc4Security
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" );
routes.MapRoute(
name: "Default" ,
url: "{controller}/{action}/{id}" ,
defaults: new { controller = "Home" , action = "Index" , id = UrlParameter.Optional },namespaces: new
string [] { "Mvc4Security.Controllers" }
);
}
}
}
|
5.6.2 /App_Start/FilterConfig.cs 【没修改】
using System.Web;
using System.Web.Mvc;
namespace Mvc4Security
{
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add( new HandleErrorAttribute());
}
}
}
|
5.6.3 /App_Start/WebApiConfig.cs【没修改】
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace Mvc4Security
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi" ,
routeTemplate: "api/{controller}/{id}" ,
defaults: new { id = RouteParameter.Optional }
);
}
}
}
|
百度文库开发文档: http://passport.baidu.com/? business&aid=6&un=ylbtech#7
谷歌开源代码下载: http://code.google.com/p/ylbtechaspnetmvc/downloads/list
请单击 “ylbtechASPnetMvcSecurity100010010”
百度网盘 http://pan.baidu.com/s/1i49zn73
请单击 “ASPnetMvcSecurity100010010”
本文转自ylbtech博客园博客,原文链接:http://www.cnblogs.com/ylbtech/archive/2012/08/29/2660799.html,如需转载请自行联系原作者