当前位置:编程学习 > C#/ASP.NET >>

教学帖:教你用简单的方法开发asp.net

我之前发过MVVM模式的WPF开发,结果满帖子全是口水战……也罢,我发个别的类型的帖子呗。之前的喷子,你只要来喷我就反喷你(如果我勤快的话,但多半时候我比较懒)。再就是关于我的结贴率:你就别操心了——我唯一发过的几个帖子都不是问问题的,所以我也不需要结帖。换句话说,我没在CSDN发帖问过问题。好,下面进入主题。

这个教学贴的目的不是教你做asp.net webform或asp.net mvc,更不是教你怎么新建一个“企业级”网站(我现在听到“企业级”三个字就反胃)。我主要是想通过这样一个帖子帮助编程新手理顺编程中(特别是web开发中)常用的知识。之所以既不讲asp.net webform,又不提asp.net mvc,是因为它们会使读者把更多精力放在怎么使用这些框架上,有点背离此贴的初衷。我在网上搜了一下其他框架,发现Nancy还不错,挺适合教学贴的。所以,我们接下来就以它为例。

基础环境搭建
首先,你最好还是有个VS。如果你非要用笔记本写程序,我也不跟你废话——请滚。关于VS版本,最低2010,最好是2012(跟我的VS一致)。

有了VS,你还得有Nancy。我这里就不罗嗦介绍Nancy是什么了,你自己去Google。当然,简单说一下的话,Nancy可以看成是.NET平台下的Sinatra(有人问Sinatra是什么,它是基于Ruby的一个轻型web框架)(有人问Ruby是什么……你自己Google!)。到这里下载Nancy template

IDE和web框架都有了,接下来就是代码管理了。我不强迫你用Git,但是我推荐你用Git,原因有很多,但是就不在这里列举了,因为本帖不是Git教学。到这里下载Git。

仔细想想的话,还缺点东西:测试框架。这个我也不限制你,但是这篇帖子里会用NUnit。到这里下载NUnit。

以上,最重要的是:下载完了以后你可别忘记安装啊。

建立新项目
打开VS,新建一个项目。由于你已经安装了Nancy的template,所以你应该可以选择跟我一样的模板,如下图所示。

注意,模板类型为Nancy Application with ASP.NET Hosting。项目名称为NancyTutorial。接下来,项目建完后,按F5跑一下,这时候应该能跑通(如果跑不通的话……原因可能有很多,我无法预测,你得自己想办法了)。我们可以先简单看一下Nancy的结构,其实主要就是Bootstrapper + Module + Views。Bootstrapper说白了就是web程序的启动入口,是一切的源头。Module(新建项目里你看到的是IndexModule)是用来处理客户端请求的,有点类似于Route+Controller。Views很简单,就是输出给客户端的页面。

将新建项目加入Git
我默认你是使用Git来进行代码管理,所以我们先练习一点点简单的Git指令,以便让你往后更方便的管理你的代码。在你安装完Git后,你应该会有Git Bash。按windows键,然后再搜索框里输入git bash,这样你应该能找到并打开它。打开的Git bash其实就是一个git的命令窗口。在此窗口下,你需要切换至NancyTutorial目录下。

为了让git能跟踪你项目中文件的变化,你需要在当前目录下(NancyTotorial)让git初始化。如何做呢?输入git init,然后回车。

紧接着,你再输入git status,查看git当前状态。你会发现一些红色的文件名被罗列了出来,这就说明你的git初始化已经成功了。

可能已经有人迫不及待想把项目check in了。但是在那之前,我们还有一件重要的事情要做。你需要在NancyTutorial目录下建立一个.gitignore文件。注意,Windows可能会阻止你建立一个只有拓展名的文件,我估计你得自己想办法搞定(有很多方法hack它)。.gitignore到底是干毛用的?很简单:如果你没有此文件,git会跟踪当前目录下所有文件,包括.pdb,.dll等等诸如此类你根本不需要check in的文件。你通过.gitignore来告诉git哪些文件是需要被忽略的(即ignore),从此后git不会跟踪被忽略的文件。

当你建立完.gitignore后,用你最喜欢的文本编辑软件打开它,然后输入以下内容并保存。

/packages
/NancyTutorial/bin
/NancyTutorial/obj

看到这里你应该能明白到底哪些文件是我们不需要check in的。

好了,现在终于可以check in了。同样,打开git bash,切换至项目目录(即NancyTutorial)。

输入git add .

注意,add后面那个点是需要输入的,它代表当前目录。之后,再输入
git commit -m "Initial commit"

然后回车。以上两个指令git add和git commit,我留给大家自己去google和学习。

OKay,先讲到这里,后面我们会把测试框架的问题解决掉,然后真正开始Nancy之旅。 教学 web开发 asp.net --------------------编程问答-------------------- 好深的坑,我去年买了个表  --------------------编程问答--------------------
引用 1 楼 xc_up 的回复:
好深的坑,我去年买了个表 


。。。。码字也很累的,慢慢来 --------------------编程问答-------------------- 没人关注么………………太惨了 --------------------编程问答-------------------- 刚装下NANCY就装不上。。。。不过还是想看看下面的内容 --------------------编程问答-------------------- 这东西的确小众。尤其在csdn,听说ruby的寥寥无几。

貌似lz只写了开头,但是希望lz把它写完。 --------------------编程问答--------------------
引用 4 楼 zzflover 的回复:
刚装下NANCY就装不上。。。。不过还是想看看下面的内容

如果你装不了模板,你可以手动建一个Nancy项目。参考这里 --------------------编程问答-------------------- 建议楼主先出个大纲 --------------------编程问答--------------------
引用 5 楼 caozhy 的回复:
这东西的确小众。尤其在csdn,听说ruby的寥寥无几。

貌似lz只写了开头,但是希望lz把它写完。


我也是故意先写了一小段,想看看大家是否有兴趣。如果有一定的人数喜欢,我就争取写完。希望不会像那个WPF MVVM一样成为口水仗吧。。。哈哈。不过,感谢一下版主关注。

我目前的工作也主要是.net开发,但是业余时间的项目是有关PHP或Ruby的。最近看到Nancy这个框架有点Sinatra的意思,觉得挺喜欢的,就拿来分享一下。如果论坛上每天都是GridView怎么用,Repeater怎么用的问题,那就有点太单调了。 --------------------编程问答-------------------- 顺便说下,为什么我不看好这些东西。一个是ruby和C#差异太大了(相比Java和C#),使得简单的移植导致C#语法很不优雅。

一个是开源社区的开发有大量配套的资源和脚本,而微软这方面的优势在于IDE和GUI。简单的移植项目无法发挥VS这种重量级GUI开发环境的支持的优势,同时又没有很好的自动化脚本、Shell和周边工具的支持,显得势单力薄。

还有就是开发群体的问题,什么人会用这种移植的框架,不是开发者的主流。这些东西往往在目标社区也没有很多人了解,是给原社区用惯这个框架的开发者过度到新的环境使用的。但是从Ruby过渡到.NET的群体极小极小。 --------------------编程问答--------------------
引用 8 楼 ktei2008 的回复:
Quote: 引用 5 楼 caozhy 的回复:

这东西的确小众。尤其在csdn,听说ruby的寥寥无几。

貌似lz只写了开头,但是希望lz把它写完。


我也是故意先写了一小段,想看看大家是否有兴趣。如果有一定的人数喜欢,我就争取写完。希望不会像那个WPF MVVM一样成为口水仗吧。。。哈哈。不过,感谢一下版主关注。

我目前的工作也主要是.net开发,但是业余时间的项目是有关PHP或Ruby的。最近看到Nancy这个框架有点Sinatra的意思,觉得挺喜欢的,就拿来分享一下。如果论坛上每天都是GridView怎么用,Repeater怎么用的问题,那就有点太单调了。


我觉得比较有意义的事情是把.NET社区的人超度超度到开源社区。事实上正是ASP.NET MVC让我对RoR有了了解的。 --------------------编程问答-------------------- 收藏了。等更新。 --------------------编程问答--------------------
引用 9 楼 caozhy 的回复:
顺便说下,为什么我不看好这些东西。一个是ruby和C#差异太大了(相比Java和C#),使得简单的移植导致C#语法很不优雅。

一个是开源社区的开发有大量配套的资源和脚本,而微软这方面的优势在于IDE和GUI。简单的移植项目无法发挥VS这种重量级GUI开发环境的支持的优势,同时又没有很好的自动化脚本、Shell和周边工具的支持,显得势单力薄。

还有就是开发群体的问题,什么人会用这种移植的框架,不是开发者的主流。这些东西往往在目标社区也没有很多人了解,是给原社区用惯这个框架的开发者过度到新的环境使用的。但是从Ruby过渡到.NET的群体极小极小。


说的很对,说实话如果让我选择aps.net的框架,我毫不犹豫还是会选择asp.net mvc。Nancy貌似连1.0都没推出……这个帖子也不会讲什么高深的东西,其实就是借Nancy的一些特点,教给新手一些基础知识。我觉得用什么框架,用什么语言都是按项目需求来,但是用户最终关心的还是你做出的是什么产品。

开源社区确实比.net社区有爱多了…… --------------------编程问答-------------------- 顺便说一下,如果你在github上有帐号就更方便了,可以fork或这下载我的这个小项目。不过你会发现它也只有两次commit而已,原因很简单:我还没有完成这个项目,我是边做边教。HTTPS或SSH的地址都在下面了。

https://github.com/ktei/NancyTutorial.git

git@github.com:ktei/NancyTutorial.git --------------------编程问答--------------------
引用 13 楼 ktei2008 的回复:
顺便说一下,如果你在github上有帐号就更方便了,可以fork或这下载我的这个小项目。不过你会发现它也只有两次commit而已,原因很简单:我还没有完成这个项目,我是边做边教。HTTPS或SSH的地址都在下面了。

https://github.com/ktei/NancyTutorial.git

git@github.com:ktei/NancyTutorial.git


csdn名义上是一个技术社区,可是完全和技术圈是两个世界。 --------------------编程问答--------------------
引用 14 楼 caozhy 的回复:
Quote: 引用 13 楼 ktei2008 的回复:

顺便说一下,如果你在github上有帐号就更方便了,可以fork或这下载我的这个小项目。不过你会发现它也只有两次commit而已,原因很简单:我还没有完成这个项目,我是边做边教。HTTPS或SSH的地址都在下面了。

https://github.com/ktei/NancyTutorial.git

git@github.com:ktei/NancyTutorial.git


csdn名义上是一个技术社区,可是完全和技术圈是两个世界。


引用 14 楼 caozhy 的回复:
Quote: 引用 13 楼 ktei2008 的回复:

顺便说一下,如果你在github上有帐号就更方便了,可以fork或这下载我的这个小项目。不过你会发现它也只有两次commit而已,原因很简单:我还没有完成这个项目,我是边做边教。HTTPS或SSH的地址都在下面了。

https://github.com/ktei/NancyTutorial.git

git@github.com:ktei/NancyTutorial.git


csdn名义上是一个技术社区,可是完全和技术圈是两个世界。


貌似,个人感觉,英语障碍是一个挺大问题。许多程序员编程素质挺好的,但是没有基本的读英文文字的能力,而开源社区大片大片的新技术,新思想都还没有被翻译成中文,也不会在短时间内被翻译(甚至有可能就不会被翻译)。不过说到底还是兴趣,真正感兴趣的人,无论如何都会想办法把知识学到手。 --------------------编程问答-------------------- 楼主可以去写个博文系列,教我们如何使用NANCY --------------------编程问答-------------------- git代码管理链接打不开~~~相向楼主学习学习....基础很重要....再弱弱的问下...在这里为什么要git代码管理呢~~~>????
还有...撸主接着更~~~我接着看.. --------------------编程问答--------------------
引用 17 楼 z263525789 的回复:
git代码管理链接打不开~~~相向楼主学习学习....基础很重要....再弱弱的问下...在这里为什么要git代码管理呢~~~>????
还有...撸主接着更~~~我接着看..

我在vs的扩展里面找到了 0 0~~~ --------------------编程问答-------------------- 不明觉厉,楼主加油。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 学习中。等待更新... --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 感谢大家的捧场,我今晚睡觉前继续写一点(不会太多)。正是开始之前,首先我得纠正我犯的小错误。打开.gitignore,将/packages删掉,原因在于我们还是把各种依赖DLL也check in,这样更方便一些。改后的.gitignore变为:

/NancyTutorial/bin
/NancyTutorial/obj

第一个测试
下面我们来部署一下基本的测试框架。首先,新建一个Class Library项目,即类库项目,命名其为NancyTutorial.Test。之后,右键点NancyTutorial项目,然后选择Nuget管理,在线搜 Nancy.testing,然后安装它。如下图所示
接下来,类似的方式,用Nuget安装NUnit。
最后,将NancyTutorial加入引用。

在NancyTutorial.Test下新建一个Class,名为IndexModuleTest,内容如下:


using Nancy;
using Nancy.Testing;
using NUnit.Framework;

namespace NancyTutorial.Test
{
    [TestFixture]
    public class IndexModuleTest
    {
        [Test]
        public void root_should_return_response_ok()
        {
            var bootstrapper = new ConfigurableBootstrapper(with =>
            {
                with.Module<IndexModule>();
                with.RootPathProvider(new TestRootPathProvider());
            });
            var browser = new Browser(bootstrapper);

            var response = browser.Get("/");

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
        }
    }
}


以上我简单说明一下。这其实就是测试一下对于网站根目录(例如localhost:5000)的请求能否顺利返回Status code 200,也就是测试GET('/')这一路由是否存在。在bootstrapper内,我们囊括了IndexModule,这是因为IndexModeule是负责处理GET('/')请求的,而这也正是我们要测试的。至于那个RootPathProvider,我们现在来添加:

NancyTutorial.Test下,新建一个名为TestRootPathProvider的Class,其内容如下:

using Nancy;
using System;
using System.IO;
using System.Linq;

namespace NancyTutorial.Test
{
    public class TestRootPathProvider : IRootPathProvider
    {
        private static string _cachedRootPath;

        public string GetRootPath()
        {
            if (!string.IsNullOrEmpty(_cachedRootPath))
                return _cachedRootPath;

            var currentDirectory = new DirectoryInfo(Environment.CurrentDirectory);

            bool rootPathFound = false;
            while (!rootPathFound)
            {
                var directoriesContainingViewFolder = currentDirectory.GetDirectories(
                          "Views", SearchOption.AllDirectories);
                if (directoriesContainingViewFolder.Any())
                {
                    _cachedRootPath = directoriesContainingViewFolder.First().FullName;
                    rootPathFound = true;
                }

                currentDirectory = currentDirectory.Parent;
            }

            return _cachedRootPath;
        }
    }
}

注意,以上这个TestRootPathProvider并不是我写,我是参照这里给出的代码。之所以做这么一通,不是我闲的蛋疼,而是因为我们的NancyTutorial.Test是一个独立类库项目,所以它并不知道NancyTutorial内部的结构,因此我们得显式的告诉NancyTutorial.Test(以下简称Test项目),NancyTutorial(以下简称主项目)的内部是怎样的,这样Test项目中测试才有意义,否则,基本上每一个测试都会fail掉。到目前为止,你可能已经有点晕了,但是别担心,你不太需要明白以上的具体原理,你需要的只是将第一个测试跑通就足够。

现在,同时按下Ctrl+Shift+B来build你的项目。

用NUnit来跑测试
还记得你之前装了NUnit么?现在就把它打开吧。接着,选择File->Open project。我们需要打开的是Test项目的DLL。在我的机器上,其路径是:
C:\dev\nancy\NancyTutorial\NancyTutorial.Test\bin\Debug\NancyTutorial.Test.dll

你可以根据此路径猜到你应该打开的DLL是什么。

打开DLL后,你就点Run吧。如果一切都顺利,测试应该是通过的。

今晚的内容差不多快接受了。在你check in代码前,你还得把.gitignore打开,然后在里面加入点新东西,变成下面的样子:
/NancyTutorial/bin
/NancyTutorial/obj
/NancyTutorial.Test/bin
/NancyTutorial.Test/obj
为什么这么做,我就不具体解释了,留给你自己去思考。

最后,同前面一样,使用
git add .
git commit -m "test infrastructure"

这两个命令来check in你的代码。

先到这里,下回见! --------------------编程问答-------------------- 到目前为止,wo可能已经有点晕了,................ --------------------编程问答-------------------- --------------------编程问答--------------------
引用 26 楼 q107770540 的回复:

wuyazhe说了,要向糖糖同学学习,回帖要简练。 --------------------编程问答-------------------- 我又啰嗦了 --------------------编程问答-------------------- 挺有意思的,看来楼主是玩代码甚于用代码的人,我喜欢 --------------------编程问答-------------------- 来看看 --------------------编程问答-------------------- 先顶楼主,持续关注。
Nancy这东西怎么看着和mono touch很相似呢 --------------------编程问答--------------------
引用 31 楼 Joyhen 的回复:
先顶楼主,持续关注。
Nancy这东西怎么看着和mono touch很相似呢


mono touch没搞过。不过你不用太关注是Nancy还是Fancy,无论什么框架,都有些共通的思想,把这些因为所以搞明白以后,用什么都不是问题。这个教程主要是借Nancy讲点基本东西,不是推广框架 --------------------编程问答-------------------- --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 还是变成口水贴有看头点,看了我也不会去试,想做ruby也不用从这个学期,也许对习惯了ruby突然要做.net的人有点吸引力吧。 --------------------编程问答--------------------
引用 28 楼 caozhy 的回复:
我又啰嗦了


版主能把u011834627给屏蔽掉不?这貌似是个发垃圾链接的专用号 --------------------编程问答--------------------
引用 36 楼 ktei2008 的回复:
Quote: 引用 28 楼 caozhy 的回复:

我又啰嗦了


版主能把u011834627给屏蔽掉不?这貌似是个发垃圾链接的专用号


是的,不过你多观察下,就会发现这种号是删除一批,又来一批。 --------------------编程问答-------------------- C#和非技术版块,我是看到就删,看到就封。对于其他版块,包括asp.net板块,我是看到一个举报一个。也只能这样了。 --------------------编程问答-------------------- 收藏了。等更新。 --------------------编程问答-------------------- 看了,收藏了, --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 35 楼 yuwenge 的回复:
还是变成口水贴有看头点,看了我也不会去试,想做ruby也不用从这个学期,也许对习惯了ruby突然要做.net的人有点吸引力吧。


你这是准备要开启口水进程了么。。。。? --------------------编程问答-------------------- 学习中。等待更新... --------------------编程问答-------------------- 除 --------------------编程问答-------------------- leanring --------------------编程问答-------------------- 谢谢,真的很有用,收藏了~ --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 一点基础知识
在继续下面的讲解之前,我觉得还是有必要给新手回顾一下基础知识,下面开始。

在你做web开发的时候,不论你用什么框架,你基本上都只是在做两件事情:接收请求和处理请求。我们每天上网的时候,虽然表面上看到的是眼花缭乱的网页,但是如果你从计算机和通信的角度来看,你跟网站之间的交互实际上只是一次又一次基于HTTP协议的通信罢了。

我们举个例子。现在打开你的Chrome浏览器(如果没有的话,你最好装一个,因为后面也许会用到),输入百度网址(海外朋友请输入google网址),然后回车。没错,你看到的是网页,但是这一瞬间究竟发生了什么呢?很简单:粗略来讲一下的话,你发送了一个GET request,这个request(以后请求我用request,回复我用response,这样打字快一些)经过各种艰难险阻,最终到达了google的某个服务器。于是google的那个服务器就开始想:恩……我得到了一个www.google.com的GET request,我应该怎么办呢——接着google服务器就开始查自己的路由表。它找啊找,找到了根目录('/',即www.google.com)所对应的动作,你大可以把这个动作假想成一个函数。于是google服务器便调用了这个函数。而这个函数所做的事情非常简单:返回给你Status为200的response。此response里包含一份HTML。此HTML被Chrome浏览器经过分析并以可视化的模式呈现给你。

以上只是非常粗浅的过程描述,其实这中间的过程远比我讲的复杂。但是一般情况下,你不需要了解太底层的协议。了解一些web开发的基本常识是很重要的,我知道有的人甚至在做完一个project之后,都依然对POST和GET的区别而感到不解。

我们下面就来了解一下。GET和POST都属于HTTP verb,说白了就是你以怎样的动作发出一个HTTP request。举例来讲,比如有个网站是example.com,然后它的注册页面的URL是example.com/signup。你输入这个URL然后到达了注册页面,但是当你填写完信息点“Sign up”后,如果细心的话你会发现:浏览器发出的request依然是example.com/signup。然后有的人就疑惑了:一个URL怎么可以处理两件事情?服务器怎么会知道哪个是哪个。答案估计你已经猜到了:就是同过verb。

你在浏览器里输入网址,然后回车以后,你发送的永远是GET request。而当你填写完表单,点击提交按钮后,通常情况下(有例外的哦),浏览器发出的都是POST request。所以说,一个URL可以对应至少两种动作:
GET example.com
POST example.com

如果你有点REST的想法(REST是指Representational state transfer,不是休息的意思!),还会发现,PUT以及DELETE都还没有被提及。没错,它们也是HTTP协议中所定义的verb,但是由于这篇教程不是专门讲REST的,所以我也就不在这里详细说明了。

我们常说的Ajax,无非就是利用JavaScript向服务器发送一个“安静”的HTTP request。无论你是Ajax请求,还是非Ajax请求,对于服务器来说,是没有太大区别的,实际上区别也就在于到底是返回给你一份HTML,还是返回给你一堆XML或JSON(现在基本上都用JSON了,用XML的比较少)。

如果你是asp.net webform开发者,我还得提醒你一点:webform的事件驱动跟winform的事件驱动是两回事。实际上你在webform中button_click事件中处理的是来自客户端的一个HTTP request,千万不要把它跟桌面系统开发搞混了。 --------------------编程问答-------------------- 看了,不错,学习了,, --------------------编程问答-------------------- 我在坐等学习呢 --------------------编程问答-------------------- 不错啊,很好啊
--------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 49 楼 ktei2008 的回复:
一点基础知识
在继续下面的讲解之前,我觉得还是有必要给新手回顾一下基础知识,下面开始。

在你做web开发的时候,不论你用什么框架,你基本上都只是在做两件事情:接收请求和处理请求。我们每天上网的时候,虽然表面上看到的是眼花缭乱的网页,但是如果你从计算机和通信的角度来看,你跟网站之间的交互实际上只是一次又一次基于HTTP协议的通信罢了。

我们举个例子。现在打开你的Chrome浏览器(如果没有的话,你最好装一个,因为后面也许会用到),输入百度网址(海外朋友请输入google网址),然后回车。没错,你看到的是网页,但是这一瞬间究竟发生了什么呢?很简单:粗略来讲一下的话,你发送了一个GET request,这个request(以后请求我用request,回复我用response,这样打字快一些)经过各种艰难险阻,最终到达了google的某个服务器。于是google的那个服务器就开始想:恩……我得到了一个www.google.com的GET request,我应该怎么办呢——接着google服务器就开始查自己的路由表。它找啊找,找到了根目录('/',即www.google.com)所对应的动作,你大可以把这个动作假想成一个函数。于是google服务器便调用了这个函数。而这个函数所做的事情非常简单:返回给你Status为200的response。此response里包含一份HTML。此HTML被Chrome浏览器经过分析并以可视化的模式呈现给你。

以上只是非常粗浅的过程描述,其实这中间的过程远比我讲的复杂。但是一般情况下,你不需要了解太底层的协议。了解一些web开发的基本常识是很重要的,我知道有的人甚至在做完一个project之后,都依然对POST和GET的区别而感到不解。

我们下面就来了解一下。GET和POST都属于HTTP verb,说白了就是你以怎样的动作发出一个HTTP request。举例来讲,比如有个网站是example.com,然后它的注册页面的URL是example.com/signup。你输入这个URL然后到达了注册页面,但是当你填写完信息点“Sign up”后,如果细心的话你会发现:浏览器发出的request依然是example.com/signup。然后有的人就疑惑了:一个URL怎么可以处理两件事情?服务器怎么会知道哪个是哪个。答案估计你已经猜到了:就是同过verb。

你在浏览器里输入网址,然后回车以后,你发送的永远是GET request。而当你填写完表单,点击提交按钮后,通常情况下(有例外的哦),浏览器发出的都是POST request。所以说,一个URL可以对应至少两种动作:
GET example.com
POST example.com

如果你有点REST的想法(REST是指Representational state transfer,不是休息的意思!),还会发现,PUT以及DELETE都还没有被提及。没错,它们也是HTTP协议中所定义的verb,但是由于这篇教程不是专门讲REST的,所以我也就不在这里详细说明了。

我们常说的Ajax,无非就是利用JavaScript向服务器发送一个“安静”的HTTP request。无论你是Ajax请求,还是非Ajax请求,对于服务器来说,是没有太大区别的,实际上区别也就在于到底是返回给你一份HTML,还是返回给你一堆XML或JSON(现在基本上都用JSON了,用XML的比较少)。

如果你是asp.net webform开发者,我还得提醒你一点:webform的事件驱动跟winform的事件驱动是两回事。实际上你在webform中button_click事件中处理的是来自客户端的一个HTTP request,千万不要把它跟桌面系统开发搞混了。


这个基础贴要顶一下,太多的asp.net开发者,尤其是webform开发者不知道这些事情。了解这个之后,web开发简直就是易如反掌。 --------------------编程问答-------------------- 楼主的文字表达能力让我一点兴趣也没有,,希望楼下 喜欢 --------------------编程问答--------------------
引用 57 楼 hong10108 的回复:
楼主的文字表达能力让我一点兴趣也没有,,希望楼下 喜欢

呃。。。确实一般。。。我知道,见笑。。。 --------------------编程问答-------------------- 支持技术普及贴。
凡是讲技术的都支持,虽然我用的可能性不大。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 给力,鼓掌。 --------------------编程问答-------------------- --------------------编程问答-------------------- 方法很高效 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 不明真相,纯属围观 --------------------编程问答-------------------- --------------------编程问答-------------------- 版主能把u011834627给屏蔽掉不?这貌似是个发垃圾链接的专用号 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 收了 --------------------编程问答-------------------- 凡是讲技术的都支持,虽然我用的可能性不大。....................... --------------------编程问答-------------------- 楼主辛苦了,
--------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- LZ表达的很清楚,顶一个 --------------------编程问答-------------------- 做asp.net连它的框架都没听说过的路过 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 关注中····· --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 略读过。。。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 看看 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 很好 --------------------编程问答-------------------- 支持下楼主,值得学习 --------------------编程问答-------------------- 深的坑,我去年买了个表 

--------------------编程问答-------------------- 除 --------------------编程问答-------------------- 需要学习一下,还没有太接触 --------------------编程问答-------------------- 20分,我看看能不能混上个几分呢! --------------------编程问答-------------------- 不明觉厉!!! --------------------编程问答-------------------- 确实不错,很好 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 嗯,好东西,值得学习 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 你让我搜索Nancy?
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,