ASPNET2.0基础
ASPNET快速入门

我们怎么看到网站的?
1、在地址栏输入地址敲回车后浏览器到底做了什么事情?
服务器与浏览器语言
浏览器: html javascript css 服务器: ?HTML(.html) .Net(.aspx .ashx) JAVA(.jsp) PHP(.php)
1.浏览器与服务器语言 浏览器只负责解释执行html+css+javascript代码 服务器可执行服务器端语言:.NET,JAVA,...,分别由不同的运行 环境执行代码(Framework,JVM) 2.静态页面(html)和动态页面(aspx)的区别? 比如说新闻列表页面(邮箱列表)。
工作概要流程图
练习
练习:做一个加法计算器 步骤: 1.新建网站 2.添加新建项->Web窗体(Cul.aspx) 3.打开Cul.aspx,进入设计视图,从工具栏选择控件拖入到页面 适当的位置(可以使用适当的HTML代码布局--Table) 4.双击按钮,生成点击事件(和WinForm程序生成点击事件一样) 5.在按钮点击事件中编写代码
编写代码演示静态页面和动态页面
里的常用文件(重点)
文件扩展名 说明 一般处理程序,核心程序,但一般使用.aspx 常用程序,用于创建网页和对网页进行编程的核心文 件类型(前台文件),和.aspx.cs文件配套使用
.ashx .aspx
.aspx.cs
.ascx
常用程序,用于编写大量的c#业务代码,和.aspx配 套使用。
一、浏览器提交数据方式?(例)
1.表单:(数据藏在请求报文体中,格式:txtname=james&txtpwd=123)
<form action=“login.ashx” method=“post”> <input type=“text” name=“txtname” /> <input type=“password” name=“txtpwd”/> </form>
asp入门教程

asp入门教程ASP(Active Server Pages)是一种用于创建动态网站的服务器端脚本语言。
它可以与HTML、CSS和JavaScript等前端技术结合使用,实现用户界面、数据交互和业务逻辑的开发。
本文将为读者介绍ASP的入门知识,帮助他们快速上手ASP编程。
首先,ASP是由微软公司开发的,目前最新的版本是。
是一种强大而灵活的网页开发技术,它提供了许多内置的功能和工具,方便开发人员创建高性能的动态网站。
要开始学习ASP,首先需要了解ASP的基本概念和工作原理。
ASP使用一种被称为"服务器端脚本"的编程模型,这意味着ASP代码是在服务器上执行的,而不是在客户端浏览器中执行。
这就使得ASP能够与数据库、文件系统和其他服务器资源进行交互。
ASP的核心语言是VBScript(Visual Basic Scripting Edition)和JScript(JavaScript的微软版本)。
开发人员可以根据自己的偏好选择其中一种或两种语言进行编程。
VBScript是一种基于VB(Visual Basic)的脚本语言,语法简单易懂,适合初学者。
JScript则更接近JavaScript,语法更加灵活,适合有JavaScript编程经验的开发人员。
在ASP中,可以使用标签<% %>将代码插入到HTML页面中。
例如,以下代码会将当前日期和时间显示在网页上:```asp<%Dim nowDatenowDate = Now()Response.Write "当前日期和时间为:" & nowDate%>```这段代码首先使用VBScript创建一个变量`nowDate`,并将当前日期和时间赋值给它。
然后使用`Response.Write`方法将文本和变量的内容输出到浏览器。
在浏览器中访问包含这段代码的网页时,会显示当前日期和时间。
除了输出内容,ASP还能够接收和处理用户的输入。
JSP Web 2.0简介

JSP Web 2.0简介2001年秋天互联网公司(dot-com)泡沫的破灭标志着互联网的一个转折点。
许多人断定互联网被过分炒作,事实上网络泡沫和相继而来的股市大衰退看起来像是所有技术革命的共同特征。
股市大衰退通常标志着蒸蒸日上的技术已经开始占领中央舞台。
假冒者被驱逐,而真正成功的IT技术将展示了它们的力量,同时人们开始理解了是什么将一个技术同另外一个区分开来。
“Web 2.0”的概念产生于O'Reilly公司和MediaLive国际公司的会议讨论中。
互联网先驱和O'Reilly公司副总裁的戴尔·多尔蒂(Dale Dougherty)注意到,同所谓的“崩溃”迥然不同,互联网比其他任何时候都更重要,令人激动的新应用程序和网站正在以令人惊讶的规律性涌现出来。
更重要的是,那些幸免于当初网络泡沫的公司,看起来有一些共同之处。
那么会不会是互联网公司那场泡沫的破灭标志了互联网的一种转折,以至于呼吁“Web 2.0”的行动有了意义?我们都认同这种观点,Web 2.0概念由此诞生。
Web本来也从来也没有版本之分,直到近来业界的创业者将以前的技术和应用重新“包装”起来,贴上了软件行业的版本术语标签,Web 2.0才大行其道了。
We b 2.0是否该叫Web 2.0这并不重要,重要的是现在的Web 2.0的概念。
Web 2.0,是相对Web 1.0(2003年以前的互联网模式)的新的一类互联网应用的统称,是一次从核心内容到外部应用的革命。
由Web 1.0单纯通过网络浏览器浏览html网页模式向内容更丰富、联系性更强、工具性更强的Web 2.0互联网模式的发展,已经成为互联网新的发展趋势。
Web 1.0到Web 2.0的转变,具体的说,是从模式上单纯的“读”向“写”、“共同建设”发展;由被动地接收互联网信息向主动创造互联网信息迈进。
从基本构成单元上,是由“网页”向“发表/记录的信息发展”;从工具上,是由互联网浏览器向各类浏览器、rss阅读器等内容发展;运行机制上,由“Client Server”向“Web Services”转变;作者由程序员等专业人士向全部普通用户发展;应用上由初级的应用向全面大量应用发展。
asp 教程

asp 教程
ASP教程是一种用于创建动态网页的技术,它主要使用了VBScript或JScript作为服务器端脚本语言。
通过ASP,我们
可以在网页中嵌入脚本代码,用于处理用户的请求和生成动态内容。
ASP脚本通常以<%和%>标记包围,可以被服务器解释执行。
这样,我们可以在网页中实现一些动态的功能,比如读取数据库中的数据,生成个性化的内容,接收用户的输入并进行处理等等。
要开始使用ASP,首先我们需要在服务器上安装IIS(Internet Information Services)。
IIS是微软的Web服务器软件,它可
以通过HTTP协议接收用户的请求,并将请求交给ASP处理,再将处理结果返回给用户。
安装好IIS后,我们就可以创建ASP文件,扩展名为.asp。
在ASP文件中,我们可以使用多种服务器对象来处理请求,
比如Request对象用于获取用户提交的表单数据,Response对
象用于向客户端发送响应,Server对象用于处理服务器相关的
操作等等。
同时,ASP还提供了丰富的内置函数和对象,用
于实现各种功能。
除了基本的语法和对象,ASP还支持使用组件和数据库等来
实现更复杂的功能。
通过使用组件,我们可以重复使用一些常用的功能模块,提高代码的复用性和开发效率。
而通过数据库,我们可以将数据存储在服务器上,方便读写和管理。
总的来说,ASP是一种强大而灵活的技术,它可以帮助我们构建出功能丰富的动态网站。
通过学习ASP,我们可以掌握处理用户请求和生成动态内容的方法,为用户提供更好的网站体验。
ASP.NET 2.0网站开发全程解析

作者简介Marco BellinasO是意大利CodeArchitects SrL公司的合伙人之一,这家公司专门为微软平台提供咨询、指导、开发和培训。
作为一名资深的顾问和开发人员,MarcO对所有的Web开发技术都特别感兴趣。
他着重于用微软的产品和技术开发大型Web网站,包括SharePoint 2003、MCMS,当然还有ASRNET 2.0和SQL Server 2005。
从.NET Framework的Beta 1版开始,他就已经在Web Services、Windows Forms和Windows Services等方面进行了许多应用。
他同时还是一系列商业开发工具的开发者或合作者,如获奖的VBMaximizer插件、用于.NET的CodeBox和FormMaximizer。
在.NET发布之前,Marco是一个VB开发者,与COM和ASP开发者一样,他也善于应用高级的底层APl技术来开发Windows程序。
在撰写本书之前,MarcO参与编写了由Wrox出版的其他一些图书,包括FastTrackASPNET,VisualC#.NET:A Guide fOR.VB6 Developers,Beginning C#和基于ASRNET 1.1的本书的上Computer Programmin9和Visual Basic&.NETJournal等杂志撰写文章。
他是网站的主要开发者和编辑人员之一,这个受欢迎的Web网站服务于.NET开发者,它是从另一个更著名的关于VB6的Web网站衍生而来的。
写作之余,MarcO还在由意大利微软和其他大公司主办的许多重要会议上用英语和意大利语发表演讲。
如果您有意与MarcO讨论本书的相关问题,请登录或他的博客/blogs/mbellinasO与他联系。
编辑推荐本书介绍了用C#开发 2.0网站的完整过程,示例网站TheBeerHouse经过了重新编写,并将内容全面升级为 2.0版,包含了很多当今主流内容网站及电子商务网站所拥有的功能,如论坛、民意调查、文章管理和电子商务等。
30本关于asp.net相关的经典书籍推荐

30本关于相关的经典书籍推荐⼀.⼊门1.《HTML与CSS⼊门经典(第7版) 》HTML⼊门点评:html语⾔的⼊门,由于html极其简单所以同类其他书也可代替,本书并⾮经典,本书摆在这⾥纯属占位!你可以⽤其他书代替。
2.《C#⼊门经典(第3版)》C#⼊门点评:经典中的经典,个⼈认为是30本书⾥最重要的,虽然其他讲C#的好书也很多但⼤多1.0版的,很多在书店已经绝版,被《程序员》等机构评选为2006年最受读者喜爱的⼗⼤IT图书之⼀。
3.《精通SQL--结构化查询语⾔详解》SQL数据⼊门点评:不能说很好,但也不差,感觉吃透全书也可以应付如常SQL语句了。
4.《专家门诊--SQL SERVER开发答疑200问》SQL数据⼊门点评:好书,正好结合上本,可惜的是不是Sqlserver2005。
6.《Programming 中⽂版(第3版)》基础点评:经典中的经典,全球经典,五年三版,权威著作,这本书是最最基础的⼊门书,讲的⾮常全涵盖所有基本⾯,每⼀个控件都细细说明,⾮常易懂,不过本书讲的难免有点杂,初学者看了难免云⾥雾⾥所以要下⼀本书提纲挈领,此书⾮看不可。
7.《 2.0经典教程--C#篇》基础点评:经典,和上⼀本结合起来最好,本书讲⼤的⽅⾯,看了能让⼈明⽩分那⼏个步骤,不过唯⼀的缺陷就是不细,上⼀本正好补充,此书⾮看不可。
9.《JAVASCRIPT 权威指南(第四版)》Javascript基础点评:好书却不经典,这本书也被吹嘘的神乎其神,其实后半部分全部是Javascript语法参考,感觉本书只能做参考书,讲语法还是可以的讲的还算深,内容也很详,不过看懂前半部分后来喜欢它的原因却变后半部分,和下⼀本结合就成更完美的参考书。
10.《WEB开发⼈员参考⼤全:最完整的HTML、CSS与JAVASCRIPT⼯具书》Javascript,html,css基础点评:好书,书如其名,作者是位⽼先⽣,经验很丰富,本书是每⼀位从事BS开发⼈员的必备参考书和上⼀本结合就更好了。
第一讲ASP.NET概述

优点
与浏览器无关 将业务逻辑代码与显示逻辑分开 新的集成开发环境 简单性和易学性 用户帐户和角色 多处理器环境的可靠性 可扩展性 高效的可管理性 执行效率的大幅提高 易于配置和部署
Web 应用程序文件结构
C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高 需求, 与操作系统相关. 应该都是相同的系统 ,B/S 建立在广域网 上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系 统平台关系最小. 7.用户接口不同
C/S 多是建立的Window平台上,表现方法有限,对程序员普遍 要求较高,B/S 建立在浏览器上, 有更加丰富和生动的表现方式与 用户交流. 并且大部分难度减低,减低开发成本. 8.信息流不同
将程序集引入到当前页面或用户控件中,以便它所包含 的类和接口能够适用于页面中的代码
的功能
技术利用面向对象的语言如C#进行后台开发,它包括一系列很 有用的类和命名空间
类 - HtmlControl
相似的功能
命名空间
类 - HtmlAnchor
类 - HtmlForm
在逻辑上将具有相似功能的类进行分组
的功能
服务器控件是在服务器上运行并封装用户界面及 其他相关功能的组件,这些控件提供了各种属性、方法和 事件,可简化构建强大的 Web 应用程序的过程
代码编译执行
_______ _______ _______ ______
代码
编译
Microsoft 中间语言
(MSIL 或 IL)
机器语言
JIT 编译器
分别编译 IL 的每一部分
的功能
ASP.NET实现QQ、微信、新浪微博OAuth2.0授权登录

不管是腾讯还是新浪,查看他们的API,PHP都是有完整的接口,但对C#支持似乎都不是那么完善,都没有,腾讯是完全没有,新浪是提供第三方的,而且后期还不一定升级,NND,用第三方的动辄就一个类库,各种配置还必须按照他们约定的写,烦而且乱,索性自己写,后期的扩展也容易,看过接口后,开始以为很难,参考了几个源码之后发现也不是那么难,无非是GET或POST请求他们的接口获取返回值之类的,话不多说,这里只提供几个代码共参考,抛砖引玉了。
我这个写法的特点是,用到了Session,使用对象实例化之后调用Login() 跳转到登录页面,在回调页面调用Callback() 执行之后,可以从Session也可以写独立的函数(如:GetOpenID())中获取access_token或用户的唯一标识,以方便做下一步的操作。
所谓绑定就是把用户的唯一标识取出,插入数据库,和帐号绑定起来。
1.首先是所有OAuth类的基类,放一些需要公用的方法public abstract class BaseOAuth{ public HttpRequest Request = HttpContext.Current.Request; public HttpResponse Response = HttpContext.Current.Response; public HttpSessionState Session = HttpContext.Current.Session; public abstract void Login(); public abstract string Callback(); #region 内部使用函数 /// <summary> /// 生成唯一随机串防CSRF攻击 /// </summary> /// <returns></returns> protected string GetStateCode() { Random rand = new Random(); string data = DateTime.Now.ToString("yyyyMMddHHmmssffff") + rand.Next(1, 0xf423f).ToString(); MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); byte[] md5byte = puteHash(UTF8Encoding.Default.GetBytes(data)); return BitConverter.ToString(md5byte).Replace("-", ""); } /// <summary> /// GET请求 /// </summary> /// <param name="url"></param> /// <returns></returns> protected string GetRequest(string url) { HttpWebRequest httpWebRequest = .WebRequest.Create(url) asHttpWebRequest; httpWebRequest.Method = "GET"; httpWebRequest.ServicePoint.Expect100Continue = false; StreamReader responseReader = null; string responseData; try { responseReader = new StreamReader(httpWebRequest.GetResponse().GetResponseStream()); responseData = responseReader.ReadToEnd(); } finally { httpWebRequest.GetResponse().GetResponseStream().Close(); responseReader.Close(); } return responseData; } /// <summary> /// POST请求 /// </summary> /// <param name="url"></param> /// <param name="postData"></param> /// <returns></returns> protected string PostRequest(string url, string postData) { HttpWebRequest httpWebRequest = .WebRequest.Create(url) as HttpWebRequest; httpWebRequest.Method = "POST"; httpWebRequest.ServicePoint.Expect100Continue = false; httpWebRequest.ContentType = "application/x-www-form-urlencoded"; //写入POST参数 StreamWriter requestWriter = new StreamWriter(httpWebRequest.GetRequestStream()); try { requestWriter.Write(postData); } finally { requestWriter.Close(); } //读取请求后的结果 StreamReader responseReader = null; string responseData; try { responseReader = new StreamReader(httpWebRequest.GetResponse().GetResponseStream()); responseData = responseReader.ReadToEnd(); } finally { httpWebRequest.GetResponse().GetResponseStream().Close(); responseReader.Close(); } return responseData; } /// <summary> /// 解析JSON /// </summary> /// <param name="strJson"></param> /// <returns></returns> protected NameValueCollection ParseJson(string strJson) { NameValueCollection mc = new NameValueCollection(); Regex regex = new Regex(@"(\s*\bsp; } foreach (Match m in regex.Matches(strJson)) { mc.Add(m.Groups[2].V alue, m.Groups[3].Value); } return mc; } /// <summary> /// 解析URL /// </summary> /// <param name="strParams"></param> /// <returns></returns> protected NameValueCollection ParseUrlParameters(string strParams) { NameValueCollection nc = new NameValueCollection(); foreach (string p in strParams.Split('&')) { string[] ps = p.Split('='); nc.Add(ps[0], ps[1]); } return nc; } #endregion}2.QQ的OAuth类public class QQOAuth : BaseOAuth{ public string AppId = ConfigurationManager.AppSettings["OAuth_QQ_AppId"]; public string AppKey = ConfigurationManager.AppSettings["OAuth_QQ_AppKey"]; public string RedirectUrl = ConfigurationManager.AppSettings["OAuth_QQ_RedirectUrl"]; public const string GET_AUTH_CODE_URL = "https:///oauth2.0/authorize"; public const string GET_ACCESS_TOKEN_URL = "https:///oauth2.0/token"; public const string GET_OPENID_URL = "https:///oauth2.0/me"; /// <summary> /// QQ登录,跳转到登录页面 /// </summary> public override void Login() { //-------生成唯一随机串防CSRF攻击 string state = GetStateCode(); Session["QC_State"] = state; //state 放入Session string parms = "?response_type=code&" + "client_id=" + AppId + "&redirect_uri=" + Uri.EscapeDataString(RedirectUrl) + "&state=" + state; string url = GET_AUTH_CODE_URL + parms; Response.Redirect(url); //跳转到登录页面 } /// <summary> /// QQ回调函数 /// </summary> /// <param name="code"></param> /// <param name="state"></param> /// <returns></returns> public override string Callback() { string code = Request.QueryString["code"]; string state = Request.QueryString["state"]; //--------验证state防止CSRF攻击 if (state != (string)Session["QC_State"]) { ShowError("30001"); } string parms = "?grant_type=authorization_code&" + "client_id=" + AppId + "&redirect_uri=" + Uri.EscapeDataString(RedirectUrl) + "&client_secret=" + AppKey + "&code=" + code; string url = GET_ACCESS_TOKEN_URL + parms; string str = GetRequest(url); if (str.IndexOf("callback") != -1) { int lpos = str.IndexOf("("); int rpos = str.IndexOf(")"); str = str.Substring(lpos + 1, rpos - lpos - 1); NameValueCollection msg = ParseJson(str); if (!string.IsNullOrEmpty(msg["error"])) { ShowError(msg["error"], msg["error_description"]); } } NameValueCollection token = ParseUrlParameters(str); Session["QC_AccessToken"] = token["access_token"]; //access_token 放入Session return token["access_token"]; } /// <summary> /// 使用Access Token来获取用户的OpenID /// </summary> /// <param name="accessToken"></param> /// <returns></returns> public string GetOpenID() { string parms = "?access_token=" + Session["QC_AccessToken"]; string url = GET_OPENID_URL + parms; string str = GetRequest(url); if (str.IndexOf("callback") != -1) { int lpos = str.IndexOf("("); int rpos = str.IndexOf(")"); str = str.Substring(lpos + 1, rpos - lpos - 1); } NameValueCollection user = ParseJson(str); if (!string.IsNullOrEmpty(user["error"])) { ShowError(user["error"], user["error_description"]); } Session["QC_OpenId"] = user["openid"]; //openid 放入Session return user["openid"]; } /// <summary> /// 显示错误信息 /// </summary> /// <param name="code">错误编号</param> /// <param name="description">错误描述</param> private void ShowError(string code, string description = null) { if (description == null) { switch (code) { case "20001": description = "<h2>配置文件损坏或无法读取,请检查web.config</h2>"; break; case "30001": description = "<h2>The state does not match. You may be a victim of CSRF.</h2>"; break; case "50001": description = "<h2>可能是服务器无法请求https协议</h2>可能未开启curl支持,请尝试开启curl支持,重启web服务器,如果问题仍未解决,请联系我们"; break; default: description = "<h2>系统未知错误,请联系我们</h2>"; break; } Response.Write(description); Response.End(); } else { Response.Write("<h3>error:<h3>" + code + "<h3>msg:<h3>" + description); Response.End(); } }}3.新浪微博的OAuth类public class SinaOAuth : BaseOAuth{ public string AppKey = ConfigurationManager.AppSettings["OAuth_Sina_AppKey"]; public string AppSecret = ConfigurationManager.AppSettings["OAuth_Sina_AppSecret"]; public string RedirectUrl = ConfigurationManager.AppSettings["OAuth_Sina_RedirectUrl"]; public const string GET_AUTH_CODE_URL = "https:///oauth2/authorize"; public const string GET_ACCESS_TOKEN_URL = "https:///oauth2/access_token"; public const string GET_UID_URL = "https:///2/account/get_uid.json"; /// <summary> /// 新浪微博登录,跳转到登录页面 /// </summary> public override void Login() { //-------生成唯一随机串防CSRF攻击 string state = GetStateCode(); Session["Sina_State"] = state; //state 放入Session string parms = "?client_id=" + AppKey + "&redirect_uri=" + Uri.EscapeDataString(RedirectUrl) + "&state=" + state; string url = GET_AUTH_CODE_URL + parms; Response.Redirect(url); //跳转到登录页面 } /// <summary> /// 新浪微博回调函数 /// </summary> /// <returns></returns> public override string Callback() { string code = Request.QueryString["code"]; string state = Request.QueryString["state"]; //--------验证state防止CSRF攻击 if (state != (string)Session["Sina_State"]) { ShowError("The state does not match. You may be a victim of CSRF."); } string parms = "client_id=" + AppKey + "&client_secret=" + AppSecret + "&grant_type=authorization_code&code=" + code + "&redirect_uri=" + Uri.EscapeDataString(RedirectUrl); string str = PostRequest(GET_ACCESS_TOKEN_URL, parms); NameValueCollection user = ParseJson(str); Session["Sina_AccessToken"] = user["access_token"]; //access_token 放入Session Session["Sina_UId"] = user["uid"]; //uid 放入Session return user["access_token"]; } /// <summary> /// 显示错误信息 /// </summary> /// <param name="description">错误描述</param> private void ShowError(string description = null) { Response.Write("<h2>" + description + "</h2>"); Response.End(); }}4.微信的OAuth类public class WeixinOAuth : BaseOAuth{ public string AppId = ConfigurationManager.AppSettings["OAuth_Weixin_AppId"]; public string AppSecret = ConfigurationManager.AppSettings["OAuth_Weixin_AppSecret"]; public string RedirectUrl = ConfigurationManager.AppSettings["OAuth_Weixin_RedirectUrl"]; public const string GET_AUTH_CODE_URL = "https:///connect/qrconnect"; public const string GET_ACCESS_TOKEN_URL = "https:///sns/oauth2/access_token"; public const string GET_USERINFO_URL = "https:///sns/userinfo"; /// <summary> /// 微信登录,跳转到登录页面 /// </summary> public override void Login() { //-------生成唯一随机串防CSRF攻击 string state = GetStateCode(); Session["Weixin_State"] = state; //state 放入Session string parms = "?appid=" + AppId + "&redirect_uri=" + Uri.EscapeDataString(RedirectUrl) + "&response_type=code&scope=snsapi_login" + "&state=" + state + "#wechat_redirect"; string url = GET_AUTH_CODE_URL + parms; Response.Redirect(url); //跳转到登录页面 } /// <summary> /// 微信回调函数 /// </summary> /// <param name="code"></param> /// <param name="state"></param> /// <returns></returns> public override string Callback() { string code = Request.QueryString["code"]; string state = Request.QueryString["state"]; //--------验证state防止CSRF攻击 if (state != (string)Session["Weixin_State"]) { ShowError("30001"); } string parms = "?appid=" + AppId + "&secret=" + AppSecret + "&code=" + code + "&grant_type=authorization_code"; string url = GET_ACCESS_TOKEN_URL + parms; string str = GetRequest(url); NameValueCollection msg = ParseJson(str); if (!string.IsNullOrEmpty(msg["errcode"])) { ShowError(msg["errcode"], msg["errmsg"]); } Session["Weixin_AccessToken"] = msg["access_token"]; //access_token 放入Session Session["Weixin_OpenId"] = msg["openid"]; //access_token 放入Session return msg["access_token"]; } /// <summary> /// 显示错误信息 /// </summary> /// <param name="code">错误编号</param> /// <param name="description">错误描述</param> private void ShowError(string code, string description = null) { if (description == null) { switch (code) { case "20001": description = "<h2>配置文件损坏或无法读取,请检查web.config</h2>"; break; case "30001": description = "<h2>The state does not match. You may be a victim of CSRF.</h2>"; break; case "50001": description = "<h2>接口未授权</h2>"; break; default: description = "<h2>系统未知错误,请联系我们</h2>"; break; } Response.Write(description); Response.End(); } else { Response.Write("<h3>error:<h3>" + code + "<h3>msg:<h3>" + description); Response.End(); } }}5.web.config配置信息<appSettings> <!--QQ登录相关配置--> <add key="OAuth_QQ_AppId" value="123456789" /> <add key="OAuth_QQ_AppKey" value="25f9e794323b453885f5181f1b624d0b" /> <add key="OAuth_QQ_RedirectUrl" value="/oauth20/qqcallback.aspx" /> <!--新浪微博登录相关配置--> <add key="OAuth_Sina_AppKey" value="123456789" /> <add key="OAuth_Sina_AppSecret" value="25f9e794323b453885f5181f1b624d0b" /> <add key="OAuth_Sina_RedirectUrl" value="/oauth20/sinacallback.aspx" /> <!--微信登录相关配置--> <add key="OAuth_Weixin_AppId" value="wx123456789123" /> <add key="OAuth_Weixin_AppSecret" value="25f9e794323b453885f5181f1b624d0b" /> <add key="OAuth_Weixin_RedirectUrl" value="/oauth20/weixincallback.aspx" /></appSettings>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CDIO课程教学研究项目 3、网站路径 2.0动态网站开发基础教程(C#)
获取当前网站的物理文件路径
在应用程序中,可能需要确定服务器上的文件或其他 资源的路径。例如,如果应用程序以编程方式对文本文件 进行读写操作,则必须为用于读取和写入的方法提供该文 件的完整物理路径。 将物理文件路径(如C:\Website\MyApplication)硬 编码到应用程序中并不是很好的做法,因为如果移动或部 署应用程序,则路径会发生更改。但是,提供了以 编程方式获取应用程序中的任何物理文件路径的方法。然 后,可以使用基文件路径创建所需资源的完整路径。用于 确定文件路径的两种最常用的功能是返回路径信息 的HttpRequest对象的属性,以及MapPath方法。
CDIO课程教学研究项目 2.0动态网站开发基础教程(C#)
六、创建第一个A简单的 Web应用程序
使用Visual Studio 2005创建一个 Web应 用程序,起始界面如左图所示,单击“测试”按钮,效 果如右图所示。
四、网站的结构
网站应用程序中 可以包含很多文件类 型,某些文件类型由 支持和管理, 而其他文件类型则由 IIS服务器支持和管 理。 大多数 文件类型都可以使用 Visual Studio中的 “添加新项”菜单项 自动生成。
CDIO课程教学研究项目 2、网站文件的类型 2.0动态网站开发基础教程(C#)
CDIOห้องสมุดไป่ตู้程教学研究项目 2、网站文件的类型 2.0动态网站开发基础教程(C#)
由管理的文件类型通常映射到IIS中的 asp.dll,由IIS管理的文件类型如表所示。
CDIO课程教学研究项目 2.0动态网站开发基础教程(C#) 3、网站路径
的基本概念 Web Form原理 网站的结构 创建第一个 Web应用程序
CDIO课程教学研究项目 2.0动态网站开发基础教程(C#)
一、.NET Framework 2.0简介
.NET Framework是.NET的核心部分,它提供了.NET应用程 序所需的核心服务,是开发配置和运行分布式的Web服务和Web 应用的基础平台。 .NET Framework具有两个主要组件:公共语言运行库 和.NET Framework类库。可以将公共语言运行库看作一个在执 行时管理代码的代理,它提供内存管理、线程管理和远程处理等 核心服务,并且还强制实施严格的类型安全以及可提高安全性和 可靠性的其他形式的代码准确性。另一个主要组件是类库,它是 一个综合性的面向对象的可重用类型集合,可以使用它开发多种 应用程序,这些应用程序包括传统的命令行或图形用户界面(GUI) 应用程序,也包括基于所提供的最新的应用程序(如 Web窗体和XML Web services)。
三、Web Form原理
Web Form又被称为Web窗体或者Web表单,主要用来根据特定的信 息生成动态的页面。Web Form将的代码和页面的一般脚本分割 开来,这些分割成块的代码可以象组件一样被重复使用,从而提高了 开发的效率。 Web窗体页由两部分组成:视觉元素(HTML、服务器控件和静态文 本)和该页的编程逻辑。Visual 将这两个组成部分分别存 储在一个单独的文件中。视觉元素在一个.aspx文件中创建,而代码位 于一个单独的类文件中,该文件称作代码隐藏类文件.aspx.vb ()或.aspx.cs(C#)。Web Form的后缀为aspx,当一个浏览 器请求一个aspx文件时,Web Form也就会被CLR编辑器编译。当用户再 次访问该页面时,由于aspx页面已经被编译过了,所以CLR会直接执行 编译过的代码。 一般来讲,Web窗体页的生命周期类似于在服务器上运行的任何 Web进程的生命周期。页框架通过不同的阶段对Web窗体页进行 处理。在Web窗体处理的每一阶段,都可能会引发事件,并且将运行与 该事件相对应的任何事件处理程序。
CDIO课程教学研究项目 2.0动态网站开发基础教程(C#)
网络编程技术 2.0 基础
张 强 河北工程大学 信电学院 coolid@
CDIO课程教学研究项目 2.0动态网站开发基础教程(C#)
重点内容:
.NET Framework 2.0简介
配置和部署 的比较简单,配置设置存储在基于XML的 文件中,对这些文件进行编辑即可完成配置。Visual 为向本地或远程服务器部署应用程序提供了一种简化的机制。只需 将文件复制到指定的应用程序目录即可部署这些文件。
CDIO课程教学研究项目 2.0动态网站开发基础教程(C#)
CDIO课程教学研究项目 1、安装和配置IIS 2.0动态网站开发基础教程(C#)
五、 2.0开发环境
IIS(Internet Information Server)的主要功能是响应使用者 的请求,将所要浏览的网页内容传输给客户端;管理及维护Web 站台; 管理及维护FTP 站台;SMTP虚拟服务器等,是Windows 的内建组件。 打开“控制面板”窗口,在窗口中双击“添加/删除程序”图标, 打开“添加/删除程序”对话框,单击对话框左侧的“添加/删除 Windows 组件”命令,弹出“Windows组件”对话框,选中“Internet 信息服务(IIS)”,此时可以单击“详细信息”按钮查看要安装的内容, 单击“确定”按钮即开始安装。
CDIO课程教学研究项目 2.0动态网站开发基础教程(C#)
二、的基本概念
页框架 页框架是一种编程框架,它在Web服务 器上运行以动态地生成和管理 Web 窗体页。 页框架创 建了传统客户端/服务器 Web 交互的抽象模型,使开发人员能够 使用支持快速应用程序开发和面向对象编程(OOP)的传统方法 和工具来进行应用程序编程。 Web Form Web Form又被称为Web窗体,Web Form提供了窗体设 计器、编辑器、控件和调试功能,这些功能结合在一起,能够为 浏览器和Web客户端设备快速地生成基于服务器的可编程用户界 面。Web开发人员可以访问许多事件和属性,就像在标准的 Windows环境中编程一样,因而极大的提高的程序的开发效率。 会把WebForm转换为独立于浏览器和平台核心的HTML页面, 使得Web窗体页在任何浏览器或客户端设备都可以上运行并显示。
CDIO课程教学研究项目 1、网站的文件夹结构 2.0动态网站开发基础教程(C#)
四、网站的结构
可以将网站的文件保存在方便应用程序访问的任何文件夹结 构中。为了更易于使用应用程序,保留了某些可用于特 定类型的内容的文件和文件夹名称。
2、网站文件的类型 CDIO课程教学研究项目 2.0动态网站开发基础教程(C#)
1、绝对URL路径(<img src="/MyApplication/Images/Image.jpg" /> ) 2、站点根目录相对路径 (<img src="/Images/Image.jpg" /> ) 3、根据当前页面路径解析的相对路径 (<img src="Images/Image.jpg" /> ) 4、解析为当前页面路径对等的相对路径 (<img src="../Images/SampleImage.jpg" /> )
CDIO课程教学研究项目 2.0动态网站开发基础教程(C#)
四、网站的结构
若要开发 Web应用程序(也可称为 网站),必须具有以下工具:
.NET Framework 2.0 代码创作环境(Microsoft Visual Studio或者其他 集成开发环境(IDE) ) 一个Web服务器(如 Internet 信息服务 (IIS))
使用网站中的资源时,通常必须指定资源的路径。 例如,可以使用URL路径引用页面中的图像文件或网站 中其他位置处的页面的URL。同样,Web应用程序中的代 码可以使用基于服务器的文件的物理文件路径对文件进 行读写操作。提供用于引用资源并确定应用程 序中的页面或其他资源的路径的方法。 指定资源的路径
CDIO课程教学研究项目 2、安装Visual 2.0动态网站开发基础教程(C#) Studio 2005
Visual Studio 2005的安装过程,依然继承了Visual 2003简洁、实用的特点。Visual Studio 2005的安装过程高度自动化, 除了进行必要的配置之外,无需多余的操作。在成功安装Visual Studio 2005之后,向导将显示结束报告。最后,返回安装首页面,用 户可以接着安装产品文档。
CDIO课程教学研究项目 2.0动态网站开发基础教程(C#)
二、的基本概念
应用程序 应用程序是指可以从特定位置(该特 定位置指Web应用程序服务器上的虚拟目录及其子目录)调用的 所有文件、页、处理程序、模块和可执行代码
XML Web服务 支持XML Web服务。Web服务是微软公 司.NET计划的基础,一个Web服务就是一个应用Web协议的可编程 的应用程序逻辑。利用Web服务,应用程序可以使用HTTP和XML消 息等标准在基于Web的应用程序之间交换信息,从而跨越防火墙 移动数据。
4、网站中共享代码文件夹 CDIO课程教学研究项目 2.0动态网站开发基础教程(C#)
如果Web应用程序包括要在多个页之间共享的代码,可以将代码保 存在Web应用程序根目录下的两个特殊文件夹(Bin文件夹和App_Code 文件夹)中的某个文件夹中。 在Bin文件夹中可以存储编译的程序集,Web应用程序任意处的其 他代码(如页代码)都会自动引用该文件夹。Bin文件夹中的程序集无 需注册。只要.dll文件存在于Bin文件夹中,就可以识别它。 可以在App_Code文件夹中存储源代码,在运行时将会自动对这些 代码进行编译。Web应用程序中的其他任何代码都可以访问产生的程序 集。因此,App_Code文件夹的工作方式与Bin文件夹很类似,不同之处 是可以在其中存储源代码而非已编译的代码。App_Code文件夹及其在 Web应用程序中的特殊地位使得可以创建自定义类和其他仅源 代码文件,并在Web应用程序中使用它们而不必单独对它们进行编译。 App_Code文件夹可以包含以传统类文件(即带有 .vb、.cs 等扩 展名的文件)的形式编写的源代码文件。但是,它也可以包含并非明 确显示出由某一特定编程语言编写的文件。例如.wsdl(Web 服务发现 语言)文件和XML架构 (.xsd) 文件。 可以将这些文件编译成 程序集。