前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ASP.NET AJAX(10)__Authentication ServiceAuthentication ServiceAuthentication Service属性Authentication

ASP.NET AJAX(10)__Authentication ServiceAuthentication ServiceAuthentication Service属性Authentication

作者头像
小白哥哥
发布于 2018-03-07 03:16:15
发布于 2018-03-07 03:16:15
1.8K00
代码可运行
举报
文章被收录于专栏:技术小讲堂技术小讲堂
运行总次数:0
代码可运行

在通常情况下,如果使用AJAX方式调用WebService,则可能被恶意用户利用,造成性能以及安全性的问题,所以我们需要使用一些验证方式来保护WebService,最常见方式就是Forms Authentication,这也是一种用法很简单的方式

一个使用FormsAuthentication保护WebService调用的示例

首先创建一个名为ProtectedService的WebService,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Security;
using System.Security.Authentication;

/// <summary>
///ProtectedService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 
[System.Web.Script.Services.ScriptService]
public class ProtectedService : System.Web.Services.WebService
{
    [WebMethod]
    public int GetRandom()
    {
       
        return new Random(DateTime.Now.Millisecond).Next();
    }
}

这个WebService很简单啦,就是简单的返回一个随机数,

这样,这个WebService,是可以随意的被访问的,我们对这个WebService作如下修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public int GetRandom()
    {
        if (!HttpContext.Current.User.Identity.IsAuthenticated)//验证当前用户是否已经登陆
        {
            throw new AuthenticationException("Error:please login first!");//若没有登陆,抛出一个异常
        }
        return new Random(DateTime.Now.Millisecond).Next();
    }

然后才创建aspx页面

前台代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FormsAuth.aspx.cs" Inherits="Demo09_FormsAuth" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script language="javascript" type="text/javascript">
        function getRandom() {
            ProtectedService.GetRandom(callback, failedCallback);
        }

        function callback(result) {
            alert(result);
        }

        function failedCallback(error) {
            alert(error.get_message());
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference Path="~/Demo09/ProtectedService.asmx" />
            </Services>
        </asp:ScriptManager>
        
        <input type="button" value="Get Random" onclick="getRandom()" />
        <hr />
        <asp:Button ID="btnLogin" runat="server" Text="Login" 
            onclick="btnLogin_Click" />
        <asp:Button ID="btnLogout" runat="server" Text="Logout" 
            onclick="btnLogout_Click" />
    </form>
</body>
</html>

后台代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;

public partial class Demo09_FormsAuth : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void btnLogin_Click(object sender, EventArgs e)
    {
        FormsAuthentication.SetAuthCookie("xiaoyaojian", false);//使用FormsAuthentication,登陆Username为xiaoyaojian的用户,false表示不使用持久化的Cookie
    }

    protected void btnLogout_Click(object sender, EventArgs e)
    {
        FormsAuthentication.SignOut();//注销用户
    }
}

这样,当我们直接点击Get Random按钮,则会出现一个Please login first,的错误提示,点击登陆后,再点击Get Random,正常出现一个随机数,再点击Logout,再去点击Get Random,则又会出现Please login first

我们使用了FormsAuthectication,只允许登陆用户正常调用我们创建的WebService,在一定程度上保护了WebService

Authentication Service

它提供了一种使用AJAX的方式进行身份验证的功能,他是基于ASP.NET的Membership的功能,可以使用VS理工的ASP.NET 2.0应用程序的配置工具来配置

使用Authentication Service

出于安全性的考虑,ASP.NET AJAX 在默认情况下不会开发Authentication Service功能

<authenticationService enabled="true|false" requireSSL="true|false" />

这里的第二个属性,是指定是否使用SSL连接,这是一个安全的连接方式,常在一些高安全性的应用中使用

身份验证的功能

//登陆

Sys.Service.AuthenticationService.login(

userName,//用户名

password,//密码

isPersistent,//是否生成持久化Cookie

customInfo,//预留字段

redirectUrl,//登陆成功后跳转目标

loginCompletedCallback,//身份验证完成回调函数(是完成,而不是成功)

failedCallback,//身份验证出错回调函数(出错,而不是没有通过验证,比如超时)

userContext//用户任意指定的上下文对象

);

//完成回调函数的签名

function loginCompletedCallback(

validCredentials,//身份验证是否成功,所以要看验证是否成功,是在这里看,而不是看是不是调用了failedCallback

userContext,//以后不写啦,浪费键盘

methodName,//Sys.Service.AuthenticationService.login

){…}

//出错回调函数签名

function failedCallback(

error,//错误对象

userContext,

methodName

){…}

//注销

Sys.Services.AuthenticationService.logout(

redirectUrl,//注销后跳转页面

logoutCompletedCallback,//注销成功的回调函数

failedCallback,//注销失败回调函数

userContext

);

//注销完成回调函数的签名

function loginCompletedCallback(

result,//预留参数

userContext,//

methodName,//Sys.Service.AuthenticationService.logout

){…}

//注销出错回调函数签名

function failedCallback(

error,//错误对象

userContext,

methodName

){…}

一个使用Authentication Service的示例

首先,我们需要运行ASP.NET 配置来给应用添加一个用户

在VS里打开我们创建的网站,然后点击“网站”——“asp.net配置”,在弹出的网页中选择"安全"选项卡,然后点击“创建用户”,输入一些必要信息,点确定就可以了(这里我使用:用户名“xiaoyaojian”,密码“123123.”)

然后创建一个ASPX页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AuthService.aspx.cs" Inherits="Demo09_AuthService" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <script language="javascript" type="text/javascript">
        function getRandom() {
            ProtectedService.GetRandom(callback, failedCallback);
        }

        function callback(result) {
            alert(result);
        }

        function failedCallback(error) {
            alert(error.get_message());
        }

        function login() {
            Sys.Services.AuthenticationService.login(
                document.getElementById("txtName").value,
                document.getElementById("txtPassword").value,
                false,
                null,
                null,
                loginCompleted,
                failedCallback,
                null);
        }

        function loginCompleted(validCridentials, userContext, methodName) {
            alert(validCridentials ? "Congratulations!" : "Failed to login to the system.");
        }

        function failedCallback(error) {
            alert(error.get_message());
        }

        function logout() {
            Sys.Services.AuthenticationService.logout(
                null,
                logoutCompleted,
                failedCallback,
                null);
        }

        function logoutCompleted(result, userContext, methodName) {
            alert("You have logged out of the system");
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager runat="server" ID="ScriptManager1">
            <Services>
                <asp:ServiceReference Path="ProtectedService.asmx" />
            </Services>
        </asp:ScriptManager>
        <div>
            <input type="button" onclick="getRandom()" value="Get Random" />
            <hr />
            Name: <input type="text" id="txtName" /><br />
            Password: <input type="password" id="txtPassword" /><br />
            <input type="button" onclick="login()" value="Login" />
            <input type="button" onclick="logout()" value="Logout" />
        </div>
    </form>
</body>
</html>

这个例子的用法是和我们上一个一样的,但是这里我们使用的是AJAX方式来验证

Authentication Service属性

  • timeout属性:设置超时时间(Sys.Service.AuthecticationService.get_timtout()/set_timeout())
  • defaultLoginCompletedCallback//默认登陆成功
  • defaultLoginoutCompletedCallback//默认登出失败
  • defaultFailedCallback//错误

Authentication Service实现

Authentication Service的功能就是为我们提供一种以AJAX方式登陆和注销用户的功能,如果我们自己来实现,就会使用客户端调用WebService来实现这样的功能,而它给我们提供了更多的,比如跳转之类,实际上他的内部还是通过FormsAuthentication来实现的,他是对客户端执行服务器端方法给出一个特殊实现,调用了定义在程序集中的AuthenticationService类,最终工作的为Login(string,string.bol)和logout()两个方法

Authentication Service扩展

扩展AuthenticationService的功能,就是要改变用户认证的方式,在ASP.NET中与用户认证相关的模型就有Membership,正常情况下,我们扩展Membership,就可以实现这个功能了,但是事实上,如果我们要扩展一个Membership,就需要实现多达27个成员,

那么我们就可以找到一个简便的方法 ,就是实现MembershipProvider的ValidateUser方法

一个扩展Membership的示例

创建一个类文件,名为SampleMembershipProvider.cs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;


public class SampleMembershipProvider : MembershipProvider
{
    public override string ApplicationName
    {
        get
        {
            return "Sample Membership Provider";
        }
        set
        {

        }
    }

    public override bool ChangePassword(string username, string oldPassword, string newPassword)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override bool DeleteUser(string username, bool deleteAllRelatedData)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override bool EnablePasswordReset
    {
        get { throw new Exception("The method or operation is not implemented."); }
    }

    public override bool EnablePasswordRetrieval
    {
        get { throw new Exception("The method or operation is not implemented."); }
    }

    public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override int GetNumberOfUsersOnline()
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override string GetPassword(string username, string answer)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override MembershipUser GetUser(string username, bool userIsOnline)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override string GetUserNameByEmail(string email)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override int MaxInvalidPasswordAttempts
    {
        get { throw new Exception("The method or operation is not implemented."); }
    }

    public override int MinRequiredNonAlphanumericCharacters
    {
        get { throw new Exception("The method or operation is not implemented."); }
    }

    public override int MinRequiredPasswordLength
    {
        get { throw new Exception("The method or operation is not implemented."); }
    }

    public override int PasswordAttemptWindow
    {
        get { throw new Exception("The method or operation is not implemented."); }
    }

    public override MembershipPasswordFormat PasswordFormat
    {
        get { throw new Exception("The method or operation is not implemented."); }
    }

    public override string PasswordStrengthRegularExpression
    {
        get { throw new Exception("The method or operation is not implemented."); }
    }

    public override bool RequiresQuestionAndAnswer
    {
        get { throw new Exception("The method or operation is not implemented."); }
    }

    public override bool RequiresUniqueEmail
    {
        get { throw new Exception("The method or operation is not implemented."); }
    }

    public override string ResetPassword(string username, string answer)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override bool UnlockUser(string userName)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override void UpdateUser(MembershipUser user)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public override bool ValidateUser(string username, string password)
    {
        if (username == "xiaoyaojian" && password == "123123..")
        {
            return true;
        }

        return false;
    }
}

我们继承了MembershipProvider,它是个抽象类,有好多方法要我们实现,实际上如果我们要简单实现,只需要重写他的ValidateUser类就可以了,所以我们只需要在那个方法里写如下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (username == "xiaoyaojian" && password == "123123.")
        {
            return true;
        }

        return false;

定义好这个类以后,我们就需要在web.config中进行配置

在<system.web>节点下添加如下内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<membership defaultProvider="SampleProvider">
        <providers>
          <add name="SampleProvider" type="SampleMembershipProvider"/>
        </providers>
      </membership>

因为我们只实现了一个方法,所以就不要也不可以在配置中配置其他属性

再次打开上面的页面,回发现只有在Name为“xiaoyaojian” Password为“123123..”的情况下,验证才会通过,也就是说,系统现在调用的是我们定义的membershipprovider

如果扩展Authentication Service

  • 显然扩展ASP.NET功能相当复杂
  • 不如扩展Authentication Service,只需要实现两个方法
  • 有些时候我们不得不扩展它,因为扩展Membership只能修改用户信息的存储/验证方式,而不能真正改变认证方式

那么,如果我们决定要这么做了,就需要写一个WebService,把它配置给ScriptManager,这个WebService主体结构如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[System.Web.Script.Services.ScriptService]
public class SessionAuthenticationService : System.Web.Services.WebService
{
    [WebMethod]
    public bool Login(string userName, string password, bool createPersistentCookie)
    {
      
    }

    [WebMethod]
    public void Logout()
    {
      
    }
}

注意:这里的参数列表包括参数名都必须与示例完全的相同

一个扩展Authentication Service示例

创建一个名为SessionAuthenticationService.asmx的WebService

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Security;

/// <summary>
///SessionAuthenticationService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 
[System.Web.Script.Services.ScriptService]
public class SessionAuthenticationService : System.Web.Services.WebService
{
    [WebMethod(EnableSession = true)]
    public bool Login(string userName, string password, bool createPersistentCookie)
    {
        if (Membership.Provider.ValidateUser(userName, password))
        {
            HttpContext.Current.Session["User"] = true;
            return true;
        }
        else
        {
            return false;
        }
    }

    [WebMethod]
    public void Logout()
    {
        HttpContext.Current.Session.Remove("User");
    }
}

然后我们再次修改上面的页面,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AuthService.aspx.cs" Inherits="Demo09_AuthService" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <script language="javascript" type="text/javascript">
        function getRandom() {
            ProtectedService.GetRandom(callback, failedCallback);
        }

        function callback(result) {
            alert(result);
        }

        function failedCallback(error) {
            alert(error.get_message());
        }

        function login() {
            Sys.Services.AuthenticationService.login(
                document.getElementById("txtName").value,
                document.getElementById("txtPassword").value,
                false,
                null,
                null,
                loginCompleted,
                failedCallback,
                null);
        }

        function loginCompleted(validCridentials, userContext, methodName) {
            alert(validCridentials ? "Congratulations!" : "Failed to login to the system.");
        }

        function failedCallback(error) {
            alert(error.get_message());
        }

        function logout() {
            Sys.Services.AuthenticationService.logout(
                null,
                logoutCompleted,
                failedCallback,
                null);
        }

        function logoutCompleted(result, userContext, methodName) {
            alert("You have logged out of the system");
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager runat="server" ID="ScriptManager1">
            <Services>
                <asp:ServiceReference Path="ProtectedService.asmx" />
            </Services>
            <AuthenticationService Path="~/Demo09/SessionAuthenticationService.asmx" />
        </asp:ScriptManager>
        <div>
            <input type="button" onclick="getRandom()" value="Get Random" />
            <hr />
            Name: <input type="text" id="txtName" /><br />
            Password: <input type="password" id="txtPassword" /><br />
            <input type="button" onclick="login()" value="Login" />
            <input type="button" onclick="logout()" value="Logout" />
        </div>
    </form>
</body>
</html>

输入用户名xiaoyaojian密码123123..,点击Login,弹出成功的提示,但是我们点击GetRandom,是不会出现随机数的,因为我们没有执行FormsAuthentication.setAuthCookie,这也正好证明了我们扩展的AuthenticationService正常工作啦

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-10-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ASP.NET AJAX(4)__客户端访问WebService服务器端释放WebService方法客户端访问WebService客户端访问PageMethod错误处理复杂数据类型使用基础客户端代理的
服务器端释放WebService方法 编写一个普通的WebService 为WebService类添加自定义的属性标记__ScriptServiceAttribute 释放WebService方法                   __访问级别为Public                   __使用WebServiceAttribute进行标记 为页面中的ScriptManager引入asmx文件 客户端访问WebService [Namespaces.]ClassName.MethodName 依次
小白哥哥
2018/03/07
4.9K0
ASP.NET AJAX(9)__Profile Service什么是ASP.NET Profile如何使用ASP.NET ProfileProfile ServiceProfile Service预
什么是ASP.NET Profile 可以为每个用户(包括匿名用户)储存信息 通过在Web.config中的配置即可在应用程序中使用 强类型的属性 可以定义属性组 可以通过自定义ProfileProvider来扩充 如何使用ASP.NET Profile 配置ProfileProvider(可以使用内置的SqlProfileProvider) 配置Profile的属性 一个使用ASP.NET Profile的示例 首先,运行打开Visual studio 2008命令提示工具(开始——程序——Visual
小白哥哥
2018/03/07
1.3K0
ASP.NET AJAX(9)__Profile Service什么是ASP.NET Profile如何使用ASP.NET ProfileProfile ServiceProfile Service预
ASP.NET AJAX(2)__ASP.NET 2.0 AJAX Extensions
ASP.NET 2.0 AJAX Extensions为我们提供的主要功能如下 序列化和反序列化 客户端访问Web Service方法 服务器端AJAX控件 _____ScriptManager _____UpdatePanel _____Extender 微软的ASP.NET AJAX有一点非常让人感觉神奇的一点,也算是他宣传的一个鳌头,说的是,所有的ASP.NET程序员,不用写任何javascript代码就可以实现AJAX,那么UpdatePanel呢,就是说着话的资本,我们也知道,几乎
小白哥哥
2018/03/07
1.6K0
ASP.NET AJAX(11)__ScriptManagerUpdatePanel的支持成员功能控制成员脚本控件支持成员ScriptMode和ScriptPathLoadScriptsBeforeU
ScriptManager的作用,这个不言而喻,它是整个的ASP.NET AJAX的核心 UpdatePanel的支持成员 static void RegisterArrayDeclaration static void RegisterClientScriptBlock static void RegisterScriptInclude static void RegisterClientScriptResource static void RegisterExpandoAttribute static
小白哥哥
2018/03/07
9440
学习Altas 笔记[JS简单调用服务端方法]
      在Ajax框架中,Asp.net方面最强当属Altas最强,以前使用AjaxPro.Net和MagicAjax. 最几个都比较好用。这几个月来Altas已经进入CTP版本,是开始学习研究Altas的时机了。准备利用Altas为 http://www.yupsky.com 开发成员之间在线通讯的类似于MSN这样的功能。今天初步的学习了一下Altas,最基础的学习内容就是使用javascript调用服务端代码。      Altas和AjaxPro.Net类似,但比AjaxPro.Net强大很多。学
张善友
2018/01/19
9210
学习Altas 笔记[JS简单调用服务端方法]
ASP.NET AJAX(3)__UpdatePanel
今天也不知道写不写的完了,最近闲下来了,却感冒了,早上起来都不会说话了,不过幸亏咱不是靠嘴皮子过活了,哎~~~~窃喜吧 上一篇简单写到UpdatePanel的一些好处和坏处,这一篇呢,就细致的认识一下UpdatePanel这个控件,并合理的使用它 UpdatePanel的一些属性 : RenderMode     __Block(默认值):设定UpdatePanel使用DIV来圈出要跟新的区域     __Inline:设定UpdatePanel使用span来。。。。。。 UpdateMode  
小白哥哥
2018/03/07
5K0
ASP.NET AJAX(3)__UpdatePanel
ASP.NET AJAX(8)__Microsoft AJAX Library中异步通信层的使用什么是异步通信层Micorsoft AJAX Library异步通信层的组成WebRequestExec
什么是异步通信层 Microsoft AJAX Library的组长部分之一 负责ASP.NET AJAX框架中所有的客户端与服务器端的通信 其默认实现了封装了XMLHttpRequest的功能 一个使用XMLHttpRequest发出AJAX请求的示例 创建一个名为RandomNumber.ashx的一般处理程序 <%@ WebHandler Language="C#" Class="RandomNumber" %> using System; using System.Web; public cla
小白哥哥
2018/03/07
2.1K0
ASP.NET 使用Ajax
之前在Ajax初步理解中介绍了对Ajax的初步理解,本文将介绍在ASP.NET中如何方便使用Ajax,第一种当然是使用jQuery的ajax,功能强大而且操作简单方便,第二种是使用.NET封装好的ScriptManager。
全栈程序员站长
2022/09/06
2.8K0
ASP.NET 使用Ajax
ASP.NET AJAX(5)__JavaScript原生类型以及Microsoft AJAX Library什么是Microsoft AJAX LibraryObject原生类型Object.pro
什么是Microsoft AJAX Library ASP.NET AJAX的客户端部分 纯客户端框架 提供了JavaScript扩展和基础类库 Object原生类型 ECMAScript Spec中定义:一个无序的集合,可以存放任意类型的对象 常作为字典使用 可以使用for-in遍历字典中的每一项 禁止扩展其prototype对象 Miicrosoft AJAX Library并没有扩展Object 类型 Object.prototype toString()/toLocalString()   得到表示
小白哥哥
2018/03/07
1.3K0
ASP.NET AJAX(14)__UpdatePanel与服务器端脚本控件脚本控件的作用脚本控件的指责Extender模型脚本控件和Extender模型在PostBack中保持状态在UpdatePa
脚本控件的作用 ASP.NET AJAX的脚本控件,连接了服务器端和客户端,因为我们(可以)只在服务器端编程,而效果产生在客户端,这就需要我们首先在服务器端编写一个控件类,然后包含一个或几个脚本文件,其中定义了客户端组件,可以让开发人员只在服务端操作控件,而在页面上添加客户端行为 一个典型的脚本控件就是UpdateProgress,我们来看一下它的实现方式 一个UpdateProgress的简单示例 创建一个aspx页面 <%@ Page Language="C#" AutoEventWireup="tru
小白哥哥
2018/03/07
2K0
ASP.NET AJAX(14)__UpdatePanel与服务器端脚本控件脚本控件的作用脚本控件的指责Extender模型脚本控件和Extender模型在PostBack中保持状态在UpdatePa
.net中的认证(authentication)与授权(authorization)
注:这篇文章主要给新手看的,老手们可能会觉得没啥营养,就请绕过吧。 “认证”与“授权”是几乎所有系统中都会涉及的概念,通俗点讲: 认证(authentication) 就是 "判断用户有没有登录?"
菩提树下的杨过
2018/01/23
1.9K0
.net中的认证(authentication)与授权(authorization)
Angularjs 通过asp.net web api认证登录
Angularjs 通过asp.net web api认证登录 Angularjs利用asp.net mvc提供的asp.net identity,membership实现居于数据库的用户名/密码的认
阿新
2018/04/12
2.2K0
Angularjs 通过asp.net web api认证登录
AJAX之四 Ajax控件工具集
在上一章中,我们学习了Asp.Net AJAX的核心组件UpdatePanel、ScriptManager等。最后我们通过使用AutoComplete控件,用很少的代码就实现了自动完成功能。我们发现在Asp.Net的AJAX解决方案中,通过控件方式极大地提高了传统了AJAX效果的开发效率。
张哥编程
2024/12/17
2050
AJAX之四 Ajax控件工具集
ASP.NET Core Authentication and Authorization
最近把一个Asp .net core 2.0的项目迁移到Asp .net core 3.1,项目启动的时候直接报错:
MJ.Zhou
2020/04/08
1.2K0
ASP.NET Core Authentication and Authorization
ASP.NET AJAX(7)_Microsoft AJAX Library扩展客户端组件继承时需要注意的问题扩展类型如何修改已有类型
首先,延续上一讲的内容,谈一下客户端面向对象类型系统中事件的使用 在C#中定义的一种方式 public class WorkEventArgs:EventArgs { ... } public class SomeClass { public event EventHandler<WorkEventArgs> Work; protected void OnWork(WorkEventArgs e) { if(Work!=null)
小白哥哥
2018/03/07
1.3K0
Asp.net Ajax AutoComplete 控件的用法
AutoComplete控件是微软提供的ASP.NET AJAX Control Toolkit 中的一个控件,是用来实现类似百度搜索的自动完成效果。
拓荒者IT
2019/09/25
2.6K0
Asp.net Ajax CascadingDropDown 控件的用法
  CascadingDropDown 控件提供了级联下拉列表显示的功能。在一些特定的业务环境下,我们希望下拉列表会根据页面中的另外一个控件(TextBox、CheckBox或DropDownList)的值而显示不同的列表项,最常见的就是在进行区域选择时,当选择了省级为“北京”时,我们希望在DropDownList中的列表项为“朝阳”、“海淀”、“东城”、“西城”等属于北京市的下级区域。如上所说,对于存在包含关系的下拉列表选择中,CascadingDropDown控件将会非常有用。
拓荒者IT
2019/09/25
1.9K0
ASP.NET Core[源码分析篇] - Authentication认证
  首先看一下我们通常是如何使用微软自带的认证,一般在Startup里面配置我们所需的依赖认证服务,这里通过JWT的认证方式讲解
AI.NET 极客圈
2019/09/03
3K1
ASP.NET Core[源码分析篇] - Authentication认证
Gridview行上下移动自己做的一个小例子(第一种方法)
今天没有什么事做,就写了一个GridView行上下移动的小例子。 方法有好多种,我先写第一种。 没有什么技术含量 思路: 把要上移或下移的id 与它的临近行的id进行互换 效果: 前台页面: 1 <
lpxxn
2018/01/31
9010
Gridview行上下移动自己做的一个小例子(第一种方法)
ASP.NET AJAX(12)__浏览器兼容功能判断浏览器的类型和版本Sys.Browser针对DOM元素的兼容操作针对DOM事件的兼容操作
目前,常见的浏览器IE(6,8,9),chrome,firefox,safari等,还有国内的一些曾经靠恐吓用户来提高使用率的某浏览器(河蟹社会),这些浏览器对于Javascript的语言特性实现大致是相同的,但是对于DOM操作方式却大相径庭,所以我们通常需要自己对不同浏览器对于DOM的操作方式进行分而治之,或者我们往往是使用一些Javascript框架提供的兼容功能,当然也有我们的Microsoft AJAX Library 判断浏览器的类型和版本 浏览器兼容层的优势在于,我们可以使用同样的编码方式,让相
小白哥哥
2018/03/07
1.2K0
ASP.NET AJAX(12)__浏览器兼容功能判断浏览器的类型和版本Sys.Browser针对DOM元素的兼容操作针对DOM事件的兼容操作
推荐阅读
ASP.NET AJAX(4)__客户端访问WebService服务器端释放WebService方法客户端访问WebService客户端访问PageMethod错误处理复杂数据类型使用基础客户端代理的
4.9K0
ASP.NET AJAX(9)__Profile Service什么是ASP.NET Profile如何使用ASP.NET ProfileProfile ServiceProfile Service预
1.3K0
ASP.NET AJAX(2)__ASP.NET 2.0 AJAX Extensions
1.6K0
ASP.NET AJAX(11)__ScriptManagerUpdatePanel的支持成员功能控制成员脚本控件支持成员ScriptMode和ScriptPathLoadScriptsBeforeU
9440
学习Altas 笔记[JS简单调用服务端方法]
9210
ASP.NET AJAX(3)__UpdatePanel
5K0
ASP.NET AJAX(8)__Microsoft AJAX Library中异步通信层的使用什么是异步通信层Micorsoft AJAX Library异步通信层的组成WebRequestExec
2.1K0
ASP.NET 使用Ajax
2.8K0
ASP.NET AJAX(5)__JavaScript原生类型以及Microsoft AJAX Library什么是Microsoft AJAX LibraryObject原生类型Object.pro
1.3K0
ASP.NET AJAX(14)__UpdatePanel与服务器端脚本控件脚本控件的作用脚本控件的指责Extender模型脚本控件和Extender模型在PostBack中保持状态在UpdatePa
2K0
.net中的认证(authentication)与授权(authorization)
1.9K0
Angularjs 通过asp.net web api认证登录
2.2K0
AJAX之四 Ajax控件工具集
2050
ASP.NET Core Authentication and Authorization
1.2K0
ASP.NET AJAX(7)_Microsoft AJAX Library扩展客户端组件继承时需要注意的问题扩展类型如何修改已有类型
1.3K0
Asp.net Ajax AutoComplete 控件的用法
2.6K0
Asp.net Ajax CascadingDropDown 控件的用法
1.9K0
ASP.NET Core[源码分析篇] - Authentication认证
3K1
Gridview行上下移动自己做的一个小例子(第一种方法)
9010
ASP.NET AJAX(12)__浏览器兼容功能判断浏览器的类型和版本Sys.Browser针对DOM元素的兼容操作针对DOM事件的兼容操作
1.2K0
相关推荐
ASP.NET AJAX(4)__客户端访问WebService服务器端释放WebService方法客户端访问WebService客户端访问PageMethod错误处理复杂数据类型使用基础客户端代理的
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档