基于ASP.NET AJAX框架实现表单验证编程原理

简介:
注意,上面把所有私有成员(带下划线的字段与方法)也一并列出。其实,这个AuthenticationService对象仅提供了两个公用方法:login()和logout(),分别用来实现用户登录和注销,还暴露了几个常用的属性。下面让我们逐一介绍。
(一) 方法 
1、login()方法 
    这个方法负责将用户名字和密码传递到服务器端进行验证,并返回是否通过验证的信息;必要的话,还可以设置相应的客户端Cookie等信息。这个方法的完整形式如下所示: 
Sys.Services.AuthenticationService.login(userName, password, isPersistent, customInfo, redirectUrl, 
inCompletedCallback, failedCallback, userContext); 
下面表格1详细列出了上面各个参数的含义。   
参数
作用
userName
将被认证的用户名字。
password
将被认证的用户密码。
isPersistent
如果取值为true,则表示要永久保存跨浏览器会话的认证信息;默认值为null。
customInfo
保留字段(暂不使用),必须赋值为null。
redirectUrl
验证成功之后要重定向到的URL;若取值null,则不会发生重定向。默认值为null。
loginCompletedCallback
调用认证服务完成之后的回调函数。注意,不管用户是否通过了服务器端认证,只要认证过程中没有出现诸如超时、异常等问题,都会调用该回调函数。然后,在该回调函数内可以得到用户是否通过了此次验证的信息。默认为null。
failedCallback
调用认证服务失败之后的回调函数。导致失败的原因可能是网络连接超时、或是认证服务内部抛出异常等。若是由于用户提供的用户名和密码不正确而不能通过验证,将不会导致调用认证服务失败,该回调函数将不会被调用。默认为null。
userContext
随本次异步用户认证调用发送至服务器端的用户上下文对象。

其中,loginCompletedCallback和failedCallback是两个重要的回调函数地址参数。 
  ①、loginCompletedCallback参数所指定的回调函数的完整形式: 
function onLoginCompleted(validCredentials, userContext, methodName) 
 validCredentials:一个布尔值,表示用户是否成功通过了验证; 
 userContext:在调用login()方法时传递的用户上下文对象; 
 methodName:调用方法的方法名。 
②、failedCallback参数所指定的回调函数的完整形式如下: 
function onAuthenticationFailed(error, userContext, methodName) 
 error:导致认证服务失败的异常对象; 
 userContext:在调用login()方法时传递的用户上下文对象; 
 methodName:调用方法的方法名。 

2、logout()方法 
logout()方法用来注销当前已经登录的用户。这个方法的完整形式如下所示: 
Sys.Services.AuthenticationService.logout( redirectUrl, logoutCompletedCallback, failedCallback, userContext ); 
其中各个参数的含义如下表2所示。 
表2. logout()方法各参数含义
参数
作用
redirectUrl
注销成功之后重定向到的URL,若该参数值为null,则将自动重定向至当前页面。默认值为null。
logoutCompletedCallback
注销用户完成之后的回调函数。
failedCallback
注销用户失败之后的回调函数。导致失败的原因可能是网络连接超时、或是认证服务内部抛出异常等。
userContext
随本次异步用户认证调用发送至服务器端的用户上下文对象。

    注意,在此所列出的四个参数均是可选的。对于logoutCompletedCallback和failedCallback参数,如果为AuthenticationService对象设置了默认值的话,也可以省略。 
注销成功之后的回调函数,即logoutCompletedCallback参数所指定的函数的完整的形式如下所示: 
function onLogoutCompleted(result, userContext, methodName) 
说明: 
1. result:目前并没有使用到该参数,始终为null。 
2. userContext:在调用logout()方法时传递的用户上下文对象。 
3. methodName:调用方法的方法名。 
注销用户失败之后的回调函数,即failedCallback参数所指定的函数形式: 
function onAuthenticationFailed(error, userContext, methodName) 
说明: 
1. error:导致认证服务失败的异常对象。 
2. userContext:在调用login()方法时传递的用户上下文对象。 
3. methodName:调用方法的方法名。 
(二) 公共属性  
   AuthenticationService对象还提供了如表3所示几个经常用到的属性。 
表3 AuthenticationService对象的常用属性
属性
作用
defaultLoginCompletedCallback
获取或设定默认的调用认证服务完成之后的回调函数。
defaultLogoutCompletedCallback
获取或设定默认的注销用户完成之后的回调函数。
defaultFailedCallback
获取或设定默认的登录/注销失败之后的回调函数。
isLoggedIn
获取一个布尔值的属性,表示当前用户是否已经登录。
timeout
获取或设定认证请求的超时时间,单位为毫秒。

(三) 简单举例  
1、设置AuthenticationService对象的timeout属性: 
Sys.Services.AuthenticationService.set_timeout(3000); 
2、若是预先设定了defaultLoginCompletedCallback、defaultLogoutCompletedCallback和 defaultFailedCallback属性,那么在调用AuthenticationService对象的login()和logout()方法时,则可省去专门指定各回调函数的操作。例如,如下代码就设定了AuthenticationService的这3个属性,并定义了相应的默认回调函数: 
 
  
Sys.Services.AuthenticationService.set_defaultLoginCompletedCallback(onLoginCompleted); Sys.Services.AuthenticationService.set_defaultLogoutCompletedCallback(onLogoutCompleted); Sys.Services.AuthenticationService.set_defaultFailedCallback(onAuthenticationFailed); function onLoginCompleted(validCredentials, userContext, methodName) { // ………… } function onLogoutCompleted(result, userContext, methodName) { // ………… } function onAuthenticationFailed(error, userContext, methodName) { // ………… }
    随后,我们只需使用如下代码进行用户登录/注销就可以了。其中userName表示用户名,password表示密码: 
   Sys.Services.AuthenticationService.login(userName, password, true); 
    //………… 
     Sys.Services.AuthenticationService.logout(); 
显然,这种编程思路清晰更有助于实现模块化,更值得推荐。 

3、下面这个函数调用logout方法简单地清除表单中的认证cookie信息。 
function OnClickLogout() 

Sys.Services.AuthenticationService.logout(null, null, null, null); 


4、下面这个函数调用认证服务的login方法校验用户输入的证书信息。如果认证成功,认证服务将产生一个表单认证相关cookie。 
 
  
function OnClickLogin(){ // 设置默认的回调函数 SetDefaultLoginCompletedCallBack(); SetDefaultLogoutCompletedCallBack(); SetDefaultFailedCallBack(); // 调用认证服务认证用户输入的证书信息 Sys.Services.AuthenticationService.login(username.value, password.value, false , null , null , null , null , " User Context " ); }
三、 总结 
    在本篇中,我们仅罗列了ASP.NET AJAX框架的客户端认证服务中一些重要的公共成员及含义解释。并且,我们已经认识到进行以ASP.NET AJAX框架客户端中心型Web开发应当主动使用这一功能。在下篇中,我们将给出具体的示例演示。















本文转自朱先忠老师51CTO博客,原文链接:http://blog.51cto.com/zhuxianzhong/59350  ,如需转载请自行联系原作者



相关文章
|
14天前
|
JSON 资源调度 JavaScript
Vue框架中Ajax请求的实现方式:使用axios库或fetch API
选择 `axios`还是 `fetch`取决于项目需求和个人偏好。`axios`提供了更丰富的API和更灵活的错误处理方式,适用于需要复杂请求配置的场景。而 `fetch`作为现代浏览器的原生API,使用起来更为简洁,但在旧浏览器兼容性和某些高级特性上可能略显不足。无论选择哪种方式,它们都能有效地在Vue应用中实现Ajax请求的功能。
18 4
|
28天前
|
Linux C# Android开发
一个开源、跨平台的.NET UI框架 - Avalonia UI
一个开源、跨平台的.NET UI框架 - Avalonia UI
|
28天前
|
机器学习/深度学习 人工智能 算法
ML.NET:一个.NET开源、免费、跨平台的机器学习框架
ML.NET:一个.NET开源、免费、跨平台的机器学习框架
|
28天前
|
消息中间件 开发框架 前端开发
YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架
YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架
|
2月前
|
测试技术 API 开发者
.NET单元测试框架大比拼:MSTest、xUnit与NUnit的实战较量与选择指南
【8月更文挑战第28天】单元测试是软件开发中不可或缺的一环,它能够确保代码的质量和稳定性。在.NET生态系统中,MSTest、xUnit和NUnit是最为流行的单元测试框架。本文将对这三种测试框架进行全面解析,并通过示例代码展示它们的基本用法和特点。
68 7
|
28天前
|
JSON 测试技术 C#
C#/.NET/.NET Core优秀项目框架推荐榜单
C#/.NET/.NET Core优秀项目框架推荐榜单
|
2月前
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
73 0
|
2月前
|
Java Spring 自然语言处理
Spring 框架里竟藏着神秘魔法?国际化与本地化的奇妙之旅等你来揭开谜底!
【8月更文挑战第31天】在软件开发中,国际化(I18N)与本地化(L10N)对于满足不同地区用户需求至关重要。Spring框架提供了强大支持,利用资源文件和`MessageSource`实现多语言文本管理。通过配置日期格式和货币符号,进一步完善本地化功能。合理应用这些特性,可显著提升应用的多地区适应性和用户体验。
32 0
|
2月前
|
API 开发者 Java
API 版本控制不再难!Spring 框架带你玩转多样化的版本管理策略,轻松应对升级挑战!
【8月更文挑战第31天】在开发RESTful服务时,为解决向后兼容性问题,常需进行API版本控制。本文以Spring框架为例,探讨四种版本控制策略:URL版本控制、请求头版本控制、查询参数版本控制及媒体类型版本控制,并提供示例代码。此外,还介绍了通过自定义注解与过滤器实现更灵活的版本控制方案,帮助开发者根据项目需求选择最适合的方法,确保API演化的管理和客户端使用的稳定与兼容。
74 0
|
2月前
|
开发者 C# Android开发
Xamarin 与 .NET:解锁现代化移动应用开发的超级武器——深入探讨C#与.NET框架如何赋能跨平台应用,实现高效编码与卓越性能
【8月更文挑战第31天】Xamarin 与 .NET 的结合为开发者提供了强大的平台,用于构建现代化移动应用。通过 C# 和 .NET 框架,Xamarin 可以实现一次编写、多平台运行,覆盖 iOS、Android 和 Windows。这种方式不仅节省了开发时间和成本,还保证了应用的一致性和高质量。Xamarin 是一个开源框架,专为跨平台移动应用开发设计,允许使用 C# 语言和 .NET 核心库构建原生应用,并访问各平台特定功能。微软维护的 Xamarin 是 Visual Studio 生态系统的一部分,极大地提高了开发效率。
61 0