一、搭建项目框架
新建项目命名为Demo2 选择.NET Framework webapi版本
右键解决方案,添加类库命名为Server,在此类库中主要提供登录功能服务
目录所有结构如图所示
二、创建登陆服务
为什么要这样分层
1.Model文件夹
在新建的Server类库中以三层架构原理实现,Model层中有
ConstValue.cs声明出现错误之后需要跳转的页面,
public static class ConstValue
{
public static string UnloginView="Unlogin";
public static string CustomErrorView = "Error";
public static string SystemErrorView = "Error";
}
CustomError.cs继承自System.Exception,其中的base关键字用法,参考base关键字
public class CustomError:Exception
{
public CustomError() : base() {
}
public CustomError(string Message) : base(Message) {
}
}
SessionUserInfo.cs声明要存入Session中的用户信息。
public class SessionUserInfo
{
public string UserID {
get; set; }
public string UserName {
get; set; }
}
UnloginException.cs继承自System.Exception,存放未登录状态下,需要跳转的链接Url
public class UnloginException :Exception
{
public string TargetUrl {
get; set; }
}
2.Interface接口文件夹
IAuthorization.cs为用户权限接口,定义登录与退出方法,当前存放在Session中的用户实体
/// <summary>
/// 用户权限接口
/// </summary>
public interface IAuthorization
{
SessionUserInfo CurrentUser {
get; }
bool LoginCheck(string UserName, string Password);
void Logout();
}
3.Implementation接口实现
.AuthorizationImpl.cs实现用户权限接口,定义为Internal类型,只允许统一程序集访问。
定义一个常量名为Session名称,在LoginCheck方法中需要访问数据库,当前作为测试,固定用户名和密码,如果验证成功,则首先封装要存入Session的实体,移除当前Session中与声明变量名相同的Session,最后存入到Session中。
internal class AuthorizationImpl : IAuthorization
{
protected const string Session_Authorization = "Session_Authorization";
public SessionUserInfo CurrentUser => (SessionUserInfo)System.Web.HttpCo