<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_SAL</title><subtitle type="text">打台湾```我捐一个月工资```打美国```我捐一年工资```打日本```我捐一条命```</subtitle><id>http://feed.cnblogs.com/blog/u/22595/rss</id><updated>2012-01-10T09:25:59Z</updated><author><name>SAL</name><uri>http://www.cnblogs.com/SAL2928/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SAL2928/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/22595/rss"/><entry><id>http://www.cnblogs.com/SAL2928/archive/2012/01/10/2318348.html</id><title type="text">【转】windows 2003  IIS 服务器设置 301重定向  出现 eurl.axd</title><summary type="text">今刚做了301. 把 http://www.guooge.com/ 重定向到了guooge.com 重定向后url成了这个样子 http://guooge.com/eurl.axd/04b543fc04d72b47a720ff84a32c0103/ 仔细查看重写向没有设置错啊 造成这种情况的原因是: IIS6中同时启用了ASP.NET 2.0 和 ASP.NET 4.0 后，网站程序可能会出现如下错误：“ System.Web.HttpException: Path ‘//eurl.axd/‘ was not found. ” 错误发生的原因是当ASP.NET检测到Web站点配置为使用AS..</summary><published>2012-01-10T09:26:00Z</published><updated>2012-01-10T09:26:00Z</updated><author><name>SAL</name><uri>http://www.cnblogs.com/SAL2928/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SAL2928/archive/2012/01/10/2318348.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SAL2928/archive/2012/01/10/2318348.html"/><content type="html">&#xD;
 &#xD;
今刚做了301.&amp;nbsp; 把 &lt;a href="http://www.guooge.com/"&gt;http://www.guooge.com/&lt;/a&gt; 重定向到了&lt;a href="http://guooge.com/" target="_blank"&gt;guooge.com &lt;/a&gt;&amp;nbsp; 重定向后url成了这个样子 &lt;a href="http://guooge.com/eurl.axd/04b543fc04d72b47a720ff84a32c0103/"&gt;http://guooge.com/eurl.axd/04b543fc04d72b47a720ff84a32c0103/&lt;/a&gt; 仔细查看重写向没有设置错啊&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img title="" alt="" src="http://guooge.com/plugin/windsphoto/photo/201111/20111111155846135.png" width="443" height="401" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;造成这种情况的原因是:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;IIS6中同时启用了ASP.NET 2.0 和 ASP.NET 4.0 后，网站程序可能会出现如下错误：&amp;#8220; System.Web.HttpException: Path &amp;#8216;//eurl.axd/&amp;#8216; was not found. &amp;#8221;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;错误发生的原因是当ASP.NET检测到Web站点配置为使用ASP.NET 4.0，本地ASP.NET 4.0 的组件会传递一个不能扩展的 URL到ASP.NET的管理程序作进一步处理。但是，如果一个低于ASP.NET 4.0 的网站配置为使用ASP.NET 2.0，处理这样不能扩展的 URL 时，URL的修改结果中会包含字符串&amp;#8220;eurl.axd&amp;#8221;，修改后的URL会被发送到 ASP.NET 2.0应用程序。 &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ASP.NET 2.0中是不能识别&amp;#8220;eurl.axd&amp;#8221;的。因此ASP.NET 2.0会尝试查找一个文件名为&amp;#8220;eurl.axd&amp;#8221;的文件并执行它。因为没有这样的文件，所以会请求失败，Http异常并抛出带有字符串&amp;#8220;eurl.axd&amp;#8221;的错误。 &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: larger;"&gt;有三种方法可以解决这样的问题： &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1.如果网站程序不需要ASP.NET 4&amp;#8206;.0 的支持，那么可以直接配置网站使用ASP.NET 2.0。 (这样做好)&lt;/p&gt;&lt;p&gt;2.如果网站程序需要ASP.NET 4&amp;#8206;.0的支持，就需要将该网站下使用ASP.NET 2.0的虚拟目录移动到其他网站。&lt;/p&gt;&lt;p&gt;3.如果上面两种方法都不适用于你的实际情况，那么就只能用这种方法了：&lt;/p&gt;&lt;p&gt;打开注册表找到&amp;#8220;HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\ASP.NET\\4.0.30319.0&amp;#8221;，添加键值名为&amp;#8220;EnableExtensionlessUrls&amp;#8221; 类型为&amp;#8220;DWORD&amp;#8221;的键值，并设置值为&amp;#8220;0&amp;#8221;。然后在cmd中运行&amp;#8220;IISRESET&amp;#8221;，重启IIS以读取注册表修改后的内容。注：此项修改就是关闭ASP.NET 4&amp;#8206;.0对无扩展URL的处理，若将此项键值设为&amp;#8220;1&amp;#8221;则开启。&amp;nbsp; (这种是最不靠谱的做法)&lt;/p&gt;&lt;p&gt;新的东西也不见的是什么好玩意啊,谷哥一直跟着小微--(微软) 混,大部分环境都用的是新的,动不动就出现什么问题很是无语.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SAL2928/aggbug/2318348.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SAL2928/archive/2012/01/10/2318348.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SAL2928/archive/2011/08/25/2152991.html</id><title type="text">【总结】customErrors无用，自定义页面真正返回的是404状态码</title><summary type="text">什么是404错误HTTP 404 错误意味着链接指向的网页不存在，即原始网页的URL失效，这种情况经常会发生，很难避免，比如说：网页URL生成规则改变、网页文件更名或移动位置、导入链接拼写错误等，导致原来的URL地址无法访问;当Web 服务器接到类似请求时，会返回一个404 状态码，告诉浏览器要请求的资源并不存在。但是，Web服务器默认的404错误页面，无论Apache还是IIS，均十分简陋、呆板且对用户不友好，无法给用户提供必要的信息以获取更多线索，无疑这会造成用户的流失。404页面的作用搜索引擎通过HTTP状态码来识别网页的状态。当搜索引擎获得了一个错误链接时，网站应该返回404状态码，告</summary><published>2011-08-25T03:08:00Z</published><updated>2011-08-25T03:08:00Z</updated><author><name>SAL</name><uri>http://www.cnblogs.com/SAL2928/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SAL2928/archive/2011/08/25/2152991.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SAL2928/archive/2011/08/25/2152991.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;什么是404错误&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;HTTP 404 错误意味着链接指向的网页不存在，即原始网页的URL失效，这种情况经常会发生，很难避免，比如说：网页URL生成规则改变、网页文件更名或移动位置、导入链接拼写错误等，导致原来的URL地址无法访问;当Web 服务器接到类似请求时，会返回一个404 状态码，告诉浏览器要请求的资源并不存在。但是，Web服务器默认的404错误页面，无论Apache还是IIS，均十分简陋、呆板且对用户不友好，无法给用户提供必要的信息以获取更多线索，无疑这会造成用户的流失。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;404页面的作用&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;搜索引擎通过HTTP状态码来识别网页的状态。当搜索引擎获得了一个错误链接时，网站应该返回404状态码，告诉搜索引擎放弃对该链接的索引。而如果返回200或302状态码，搜索引擎就会为该链接建立索引，这导致大量不同的链接指向了相同的网页内容。结果是，搜索引擎对该网站的信任度大幅降低。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;strong&gt;如何检查自定义404页面能够返回&amp;#8220;404&amp;#8221;状态码&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;在自定义404错误页面设置完毕后，一定要检查一下其是不是能够正确地返回&amp;#8220;404&amp;#8221;状态码。检查的方法也相当简单，输入一个网站内不存在网页的url，查看一下HTTP Header的返回情况，确信其返回的是&amp;#8220;404&amp;#8221;状态码。测试状态码网址：&lt;a href="http://www.mjjer.com/gethttpheader.php" target="_blank"&gt;http://www.mjjer.com/gethttpheader.php&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;strong&gt;问题：&lt;br /&gt;&#xD;
&lt;/strong&gt;我们都知道web.config里面有一个customErrors，我们通常设置的代码为：&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;customErrors defaultRedirect="error.aspx" mode="RemoteOnly"&amp;gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;error statusCode="404" redirect="404.aspx" /&amp;gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/customErrors&amp;gt;&lt;br /&gt;&#xD;
它的工作是这样的，当访问到一个不存在的地址后，返回的是一个302状态码重定向到404.aspx页面，网上搜了一阵几乎是千篇一律的讲在webconfig文件里写customErrors 使用redirect跳转到我自定义的页面404.aspx。但是实际测试发现用这个方法返回的是一个302状态码，而不是404。这样就可能导致爬虫认为这个页面仍然是有效的，只是链接错了，然后收录这个自定义的404页面。但它抓取了很多这样的页面之后发现这些页面都是一样的，认为你在玩它，于是会给你惩罚。&lt;/p&gt;&#xD;
&lt;p&gt;还有文章提到说在404.aspx的页面后台代码中返回404状态码&lt;/p&gt;&#xD;
&lt;p&gt;代码是在pageload中加入&lt;/p&gt;&#xD;
&lt;p&gt;response.statuscode=404;&lt;/p&gt;&#xD;
&lt;p&gt;这样做会在redirect返回302状态之后跳转到404.aspx，接着返回404。这样做理论上来说应该是有效的，因为爬虫遇到404就停止抓取。那么这个页面也不会被抓取。可还不够好，这种做法要求自定义404页面是一个动态页面，否则就没法返回404状态码。&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;strong&gt;解决：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;发现还是有极少数的人发现了这个返回302的问题。他想出不在webconfig中使用customErrors而是直接在global.asax中返回状态码404，然后通过输出html方式输出一个自定义的404页面。当然这个页面本身是不存在的。但是这样做似乎有点硬编码的意思了。根据他的思路，我想到能不能在global.asax中做点什么。&lt;br /&gt;&#xD;
网上找了另一段捕获http错误的代码，贴在Application_Error事件中：&lt;/p&gt;&#xD;
&lt;p&gt;// 在出现未处理的错误时运行的代码&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exception error = Server.GetLastError();&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (error != null &amp;amp;&amp;amp; error is HttpException)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpException httpError = (HttpException)error;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 如果是Http错误，则设置响应的HttpCode&lt;br /&gt;&#xD;
int httpCode = httpError.GetHttpCode();&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.StatusCode = httpCode;&lt;/p&gt;&#xD;
&lt;p&gt;//这样就能返回原始错误的状态码，然后用判断状态码来跳转到我指定的页面&lt;/p&gt;&#xD;
&lt;p&gt;Server.Transfer(Response.StatusCode == 404 ? "/404.aspx" : "/error.aspx");&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;经测试成功，除了404没有返回其他状态码，并成功跳转到自定义页，地址栏url不变，当你使用google的增强型404页面的时候可以让它获取正确的搜索提示。（google这个增强型404貌似不支持ie啊）。&lt;/p&gt;&#xD;
&lt;p&gt;另外还有一点看来是很重要的：&lt;/p&gt;&#xD;
&lt;p&gt;如果404页面大小不够521字节的话会被ie的默认内容替换。不止ie，chrome貌似也会这么做，被他的增强型404。。。其他浏览器未测试。&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;strong&gt;附：IIS自定义404页面不起作用的解决办法&lt;/strong&gt;&#xD;
&lt;/p&gt;&#xD;
在IIS里自定义了404错误页，但是怎么也不显示，还是原来的默认404页，查了下资料，解决了，要给404页如404.htm加上权限IIS_WPG只读，这样就可以了。&lt;img src="http://www.cnblogs.com/SAL2928/aggbug/2152991.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SAL2928/archive/2011/08/25/2152991.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SAL2928/archive/2011/08/17/2143600.html</id><title type="text">【原创】关于索引的总结</title><summary type="text">1、主键必须是唯一性的，不一定就是聚集索引，我们在创建主键时默认是设主键为聚集索引。可通过手动删除后重新建聚集索引。2、sql语句是where先执行，然后再执行order by，所以我们在建非聚集索引时要注意顺序并且where与order by里面的列都要在索引键列里面。select部份可以放在包含性列里面，但请注意索引大小的空间问题。3、order by里面的升序和降序问题一定要和索引键列里面的一样。例：select id,title from table1 where classid=123 order by created DESC情况一操作：建非聚集索引IX_A-&amp;gt;索引键列为cl</summary><published>2011-08-17T13:22:00Z</published><updated>2011-08-17T13:22:00Z</updated><author><name>SAL</name><uri>http://www.cnblogs.com/SAL2928/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SAL2928/archive/2011/08/17/2143600.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SAL2928/archive/2011/08/17/2143600.html"/><content type="html">&#xD;
&lt;p&gt;1、主键必须是唯一性的，不一定就是聚集索引，我们在创建主键时默认是设主键为聚集索引。可通过手动删除后重新建聚集索引。&lt;/p&gt;&lt;p&gt;2、sql语句是where先执行，然后再执行order by，所以我们在建非聚集索引时要注意顺序并且where与order by里面的列都要在索引键列里面。select部份可以放在包含性列里面，但请注意索引大小的空间问题。&lt;/p&gt;&lt;p&gt;3、order by里面的升序和降序问题一定要和索引键列里面的一样。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;例：select id,title from table1 where classid=123 order by created DESC&lt;/p&gt;&lt;p&gt;情况一&lt;/p&gt;&lt;p&gt;操作：建非聚集索引IX_A-&amp;gt;索引键列为classid(升序降序无所谓)、created(一定要降序)&amp;nbsp;&lt;/p&gt;&lt;p&gt;注意索引键列中两个字段的先后顺序，两个键列缺一不可。&lt;/p&gt;&lt;p&gt;执行：1.IX_A索引查找出ID，2.根据ID通过 键查找 找出title-&amp;gt;返回结果&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;情况二&lt;/p&gt;&lt;p&gt;操作：建非聚集索引IX_B-&amp;gt;索引键列为classid(升序降序无所谓)、created(一定要降序)&amp;nbsp;-&amp;gt;添加包含性列id,title&lt;/p&gt;&lt;p&gt;注意索引键列中两个字段的先后顺序，两个键列缺一不可。&lt;/p&gt;&lt;p&gt;执行：1.IX_B索引查找-&amp;gt;返回结果&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;以上两个方法如果created的排序弄错了，还将多一步，即：&lt;/p&gt;&lt;p&gt;情况一：1.IX_A索引查找出ID，2.根据ID通过 键查找 找出title，3.排序-&amp;gt;返回结果&lt;/p&gt;&lt;p&gt;情况二：1.IX_B索引查找，2.排序-&amp;gt;返回结果 &#xD;
 &#xD;
&lt;/p&gt; &#xD;
 &#xD;
 &#xD;
 &#xD;
&lt;img src="http://www.cnblogs.com/SAL2928/aggbug/2143600.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SAL2928/archive/2011/08/17/2143600.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SAL2928/archive/2011/08/04/2126958.html</id><title type="text">【转】jQuery使用 $.post提交json数据</title><summary type="text">首先：在1.4/1.6里，对json的格式非常严格，属性和值都得用引号引起来，而且必须是双引号，单引号也不行，格式如下[ { &amp;quot;name&amp;quot;: &amp;quot;simon&amp;quot;, &amp;quot;gender&amp;quot;: &amp;quot;男&amp;quot;},{&amp;quot;name&amp;quot;: &amp;quot;jack&amp;quot;,&amp;quot;gender&amp;quot;: &amp;quot;男&amp;quot; } ]以后在jQuery的1.4/1.6版本里使用json时就要注意了。还有$.ajax方法中对json的一点改变，以前dataType：json正常，现在“json”要大写，dataTyp</summary><published>2011-08-04T01:48:00Z</published><updated>2011-08-04T01:48:00Z</updated><author><name>SAL</name><uri>http://www.cnblogs.com/SAL2928/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SAL2928/archive/2011/08/04/2126958.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SAL2928/archive/2011/08/04/2126958.html"/><content type="html">&lt;strong&gt;首先：&lt;br /&gt;&lt;/strong&gt;在1.4/1.6里，对json的格式非常严格，属性和值都得用引号引起来，&lt;span style="color: red;"&gt;而且必须是&lt;/span&gt;&lt;strong style="color: red;"&gt;双引号&lt;/strong&gt;&lt;span style="color: red;"&gt;，单引号也不行&lt;/span&gt;，格式如下&lt;br /&gt;[&amp;nbsp; { "name": "simon", "gender": "男"},{"name": "jack","gender": "男" }&amp;nbsp; ]&lt;br /&gt;以后在jQuery的1.4/1.6版本里使用json时就要注意了。还有$.ajax方法中对json的一点改变，以前dataType：json正常，现在&amp;#8220;json&amp;#8221;要&lt;span style="color: red;"&gt;&lt;strong&gt;大写&lt;/strong&gt;&lt;/span&gt;，dataType：JSON，不然就会执行error()了。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;js代码：&lt;/strong&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;(如果参数值是中文，需要用escape(参数）进行编码。）&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;    $.post(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;url地址&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;参数&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;        num1: 参数1,&lt;br /&gt;        num2: 参数2,&lt;br /&gt;        num3:参数3&lt;br /&gt;    },&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;回调函数&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (theback) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;输出结果       &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;          alert(theback.p);&lt;br /&gt;    },&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;返回类型&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;json&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;strong&gt;c#代码：&lt;/strong&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;context.Response.ContentType &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;application/json&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;接受参数，进行操作。。。&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;同样要对中文参数进行解码&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;context.Response.Write(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;{\"p\":\"11\",\"s\":\"22\"}&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/SAL2928/aggbug/2126958.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SAL2928/archive/2011/08/04/2126958.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SAL2928/archive/2011/08/04/2126952.html</id><title type="text">【转】Http中Get/Post请求区别</title><summary type="text">（1）get是从服务器上获取数据，post是向服务器传送数据。（1） 在客户端，Get方式在通过URL提交数据，数据在URL中可以看到；POST方式，数据放置在HTML HEADER内提交。（2） 对于get方式，服务器端用Request.QueryString获取变量的值，对于post方式，服务器端用Request.Form获取提交的数据。（2） GET方式提交的数据最多只能有1024字节，而POST则没有此限制。（3） 安全性问题。正如在（1）中提到，使用 Get 的时候，参数会显示在地址栏上，而 Post 不会。所以，如果这些数据是中文数据而且是非敏感数据，那么使用 get；如果用户输.</summary><published>2011-08-04T01:43:00Z</published><updated>2011-08-04T01:43:00Z</updated><author><name>SAL</name><uri>http://www.cnblogs.com/SAL2928/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SAL2928/archive/2011/08/04/2126952.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SAL2928/archive/2011/08/04/2126952.html"/><content type="html">&#xD;
 &#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-size: 10pt;"&gt;（1）get是&lt;span style="color: rgb(255, 0, 255);"&gt;从服务器上&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;获取&lt;/span&gt;数据，post是&lt;span style="color: rgb(255, 0, 255);"&gt;向服务器传送&lt;/span&gt;数据。&lt;/span&gt;&lt;/p&gt;&lt;p style="text-indent: -30pt; margin-left: 51pt; tab-stops: list 51.0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;（1）&lt;span style='font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;'&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 宋体;"&gt;在客户端，&lt;/span&gt;&lt;span style="color: black; font-family: Tahoma;"&gt;Get&lt;/span&gt;&lt;span style="color: black; font-family: 宋体;"&gt;方式在通过&lt;/span&gt;&lt;span style="color: black; font-family: Tahoma;"&gt;URL&lt;/span&gt;&lt;span style="color: black; font-family: 宋体;"&gt;提交数据，数据&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;在&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;URL&lt;span style="font-family: 宋体;"&gt;中&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;可以看到；&lt;/span&gt;POST&lt;span style="font-family: 宋体;"&gt;方式，数据放置在&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;HTML HEADER&lt;span style="font-family: 宋体;"&gt;内&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;提交。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-indent: -30pt; margin-left: 51pt; tab-stops: list 51.0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span style="font-size: 10pt;"&gt;（2） 对于get方式，服务器端用&lt;span style="color: rgb(255, 0, 255);"&gt;Request.QueryString&lt;/span&gt;获取变量的值，对于post方式，服务器端用&lt;span style="color: rgb(255, 0, 255);"&gt;Request.Form&lt;/span&gt;获取提交的数据。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-indent: -30pt; margin-left: 51pt; tab-stops: list 51.0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;（2）&lt;span style='font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;'&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;GET&lt;span style="font-family: 宋体;"&gt;方式提交的数据最多&lt;span style="color: rgb(255, 0, 255);"&gt;&lt;span style="font-family: 宋体;"&gt;只能有&lt;/span&gt;1024&lt;span style="font-family: 宋体;"&gt;字节&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，而&lt;/span&gt;POST&lt;span style="font-family: 宋体;"&gt;则&lt;span style="color: rgb(255, 0, 255);"&gt;没有此限制&lt;/span&gt;。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-indent: -30pt; margin-left: 51pt; tab-stops: list 51.0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;（3）&lt;span style='font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;'&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;安全性问题。正如在（&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="font-family: ˎ̥;"&gt;1&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;）中提到，使用&lt;/span&gt;&lt;span style="font-family: ˎ̥;"&gt; Get &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的时候，参数会&lt;span style="color: rgb(255, 0, 255);"&gt;显示在地址栏上&lt;/span&gt;，而&lt;/span&gt;&lt;span style="font-family: ˎ̥;"&gt; Post &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;&lt;span style="font-family: 宋体;"&gt;不会&lt;/span&gt;&lt;/span&gt;。所以，如果这些数据是中文数据而且是非敏感数据，那么使用&lt;/span&gt;&lt;span style="font-family: ˎ̥;"&gt; get&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;；如果用户输入的数据不是中文字符而且包含敏感数据，那么还是使用&lt;/span&gt;&lt;span style="font-family: ˎ̥;"&gt; post&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;为好。&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-indent: -30pt; margin-left: 51pt; tab-stops: list 51.0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span style="font-size: 10pt;"&gt;注：&lt;span style="color: rgb(51, 102, 255);"&gt;所谓安全的意味着该操作用于获取信息而非修改信息。幂等的意味着对同一&lt;span style="color: rgb(51, 102, 255); font-family: Verdana; font-size: 10pt;"&gt; URL &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255); font-family: 宋体; font-size: 10pt;"&gt;的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。换句话说，&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255); font-family: Verdana; font-size: 10pt;"&gt;GET &lt;/span&gt;&lt;span style="color: rgb(51, 102, 255); font-family: 宋体; font-size: 10pt;"&gt;请求一般不应产生副作用。从根本上讲，其目标是当用户打开一个链接时，她可以确信从自身的角度来看没有改变资源。比如，新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻，该操作仍然被认为是安全的和幂等的，因为它总是返回当前的新闻。反之亦然。&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255); font-family: Verdana; font-size: 10pt;"&gt;POST &lt;/span&gt;&lt;span style="color: rgb(51, 102, 255); font-family: 宋体; font-size: 10pt;"&gt;请求就不那么轻松了。&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255); font-family: Verdana; font-size: 10pt;"&gt;POST &lt;/span&gt;&lt;span style="color: rgb(51, 102, 255); font-family: 宋体; font-size: 10pt;"&gt;表示可能改变服务器上的资源的请求。仍然以新闻站点为例，读者对文章的注解应该通过&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255); font-family: Verdana; font-size: 10pt;"&gt; POST &lt;/span&gt;&lt;span style="color: rgb(51, 102, 255); font-family: 宋体; font-size: 10pt;"&gt;请求实现，因为在注解提交之后站点已经不同了（比方说文章下面出现一条注解）。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote style="margin-right: 0px;" dir="ltr"&gt;&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;下面举一个简单的例子来说明它们的区别：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;&amp;lt;!-分别通过get和post方式提交表单--&amp;gt; &lt;br /&gt;&amp;lt;FORM ACTION="getpost.asp" METHOD="get"&amp;gt; &lt;br /&gt;&amp;lt;INPUT TYPE="text" NAME="Text" VALUE="&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;&lt;a href="http://test.com/"&gt;&lt;font color="#8e1a10"&gt;http://test.com&lt;/font&gt;&lt;/a&gt;&lt;/span&gt; &lt;span style="font-size: 10pt;"&gt;/&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;&amp;gt; &lt;br /&gt;&amp;lt;INPUT TYPE="submit" VALUE="Get方式"&amp;gt;&amp;lt;/INPUT&amp;gt; &lt;br /&gt;&amp;lt;/FORM&amp;gt; &lt;br /&gt;&amp;lt;BR&amp;gt; &lt;br /&gt;&amp;lt;FORM ACTION="getpost.asp" METHOD="post"&amp;gt; &lt;br /&gt;&amp;lt;INPUT TYPE="text" NAME="Text" VALUE="&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;&lt;a href="http://test.com/"&gt;&lt;font color="#8e1a10"&gt;http://test.com&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt; /&amp;gt; &lt;br /&gt;&amp;lt;INPUT TYPE="submit" VALUE="Post方式"&amp;gt;&amp;lt;/INPUT&amp;gt; &lt;br /&gt;&amp;lt;/FORM&amp;gt; &lt;br /&gt;&amp;lt;BR&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;&amp;lt;% If Request.QueryString("Text") &amp;lt;&amp;gt; "" Then %&amp;gt; &lt;br /&gt;通过get方式传递的字符串是： "&amp;lt;B&amp;gt;&amp;lt;%= Request.QueryString("Text") %&amp;gt;&amp;lt;/B&amp;gt;"&amp;lt;BR&amp;gt; &lt;br /&gt;&amp;lt;% End If %&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;&amp;lt;% If Request.Form("Text") &amp;lt;&amp;gt; "" Then %&amp;gt; &lt;br /&gt;通过Post方式传递的字符串是： "&amp;lt;B&amp;gt;&amp;lt;%= Request.Form("Text") %&amp;gt;&amp;lt;/B&amp;gt;"&amp;lt;BR&amp;gt; &lt;br /&gt;&amp;lt;% End If %&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;以上内容引自：&lt;a href="http://www.cnblogs.com/wxf0701/archive/2008/08/17/1269798.html"&gt;&lt;font color="#8e1a10"&gt;http://www.cnblogs.com/wxf0701/archive/2008/08/17/1269798.html&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;以下内容引自：&lt;a href="http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html"&gt;&lt;font color="#8e1a10"&gt;http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Http定义了与服务器交互的不同方法，最基本的方法有4种，分别是GET，POST，PUT，DELETE。URL全称是资源描述符，我们可以这样认为：一个URL地址，它用于描述一个网络上的资源，而HTTP中的GET，POST，PUT，DELETE就对应着对这个资源的&lt;span style="color: rgb(255, 0, 0);"&gt;查&lt;/span&gt;，&lt;span style="color: rgb(255, 0, 0);"&gt;改&lt;/span&gt;，&lt;span style="color: rgb(255, 0, 0);"&gt;增&lt;/span&gt;，&lt;span style="color: rgb(255, 0, 0);"&gt;删&lt;/span&gt;4个操作。到这里，大家应该有个大概的了解了，GET一般用于&lt;span style="color: rgb(255, 0, 0);"&gt;获取/查询&lt;/span&gt;资源信息，而POST一般用于&lt;span style="color: rgb(255, 0, 0);"&gt;更新&lt;/span&gt;资源信息。 &lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 0); font-size: 12pt;"&gt;1.根据HTTP规范，GET用于信息获取，而且应该是安全的和幂等的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;(1).所谓安全的意味着该操作用于获取信息而非修改信息。换句话说，GET 请求一般不应产生副作用。就是说，它仅仅是获取资源信息，就像数据库查询一样，不会修改，增加数据，不会影响资源的状态。&lt;/p&gt;&lt;p&gt;* 注意：这里安全的含义仅仅是指是非修改信息。&lt;/p&gt;&lt;p&gt;(2).幂等的意味着对同一URL的多个请求应该返回同样的结果。这里我再解释一下&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;strong&gt;幂等&lt;/strong&gt;&lt;/span&gt;这个概念：&lt;/p&gt;&lt;div style="text-align: left;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;!--&lt;/p&gt;&#xD;
&lt;p&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;/p&gt;&#xD;
&lt;p&gt;--&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　　&lt;strong&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;幂等&lt;/span&gt;&lt;/strong&gt;（idempotent、idempotence）是一个数学或计算机学概念，常见于抽象代数中。&lt;br /&gt;　　幂等有一下几种定义：&lt;br /&gt;　　对于单目运算，如果一个运算对于在范围内的所有的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的，那么我们就称该运算是幂等的。比如绝对值运算就是一个例子，在实数集中，有&lt;span style="color: rgb(0, 0, 255);"&gt;abs(a)&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;abs(abs(a))&lt;/span&gt;。&lt;br /&gt;　　对于双目运算，则要求当参与运算的两个值是等值的情况下，如果满足运算结果与参与运算的两个值相等，则称该运算幂等，如求两个数的最大值的函数，有在在实数集中幂等，即&lt;span style="color: rgb(0, 0, 255);"&gt;max(x,x) &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; x&lt;/span&gt;。&lt;/span&gt;&lt;/div&gt;&lt;p&gt;看完上述解释后，应该可以理解GET幂等的含义了。&lt;/p&gt;&lt;p&gt;但在实际应用中，以上2条规定并没有这么严格。引用别人文章的例子：比如，新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻，该操作仍然被认为是安全的和幂等的，因为它总是返回当前的新闻。从根本上说，如果目标是当用户打开一个链接时，他可以确信从自身的角度来看没有改变资源即可。&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;span style="font-size: large;"&gt;2&lt;/span&gt;.根据HTTP规范，POST表示可能修改变服务器上的资源的请求。&lt;/span&gt;继续引用上面的例子：还是新闻以网站为例，读者对新闻发表自己的评论应该通过POST实现，因为在评论提交后站点的资源已经不同了，或者说资源被修改了。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;上面大概说了一下HTTP规范中GET和POST的一些原理性的问题。但在实际的做的时候，很多人却没有按照HTTP规范去做，导致这个问题的原因有很多，比如说：&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;1&lt;/span&gt;.很多人贪方便，更新资源时用了GET，因为用POST必须要到FORM（表单），这样会麻烦一点。&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;2&lt;/span&gt;.对资源的增，删，改，查操作，其实都可以通过GET/POST完成，不需要用到PUT和DELETE。&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;3&lt;/span&gt;.另外一个是，早期的Web MVC框架设计者们并&lt;span style="color: rgb(255, 0, 0);"&gt;没有有意识地将URL当作抽象的资源来看待和设计&lt;/span&gt;，所以导致一个比较严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法，而不支持PUT和DELETE方法。&lt;/p&gt;&lt;p&gt;* 简单解释一下MVC：MVC本来是存在于Desktop程序中的，M是指数据模型，V是指用户界面，C则是控制器。使用MVC的目的是将M和V的实现代码分离，从而使同一个程序可以使用不同的表现形式。&lt;/p&gt;&lt;p&gt;以上3点典型地描述了老一套的风格（没有严格遵守HTTP规范），随着架构的发展，现在出现REST(Representational State Transfer)，一套支持HTTP规范的新风格，这里不多说了，可以参考《RESTful Web Services》。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;说完原理性的问题，我们再从&lt;span style="color: rgb(0, 128, 0);"&gt;表面现像上面看看GET和POST的区别：&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;1&lt;/span&gt;.GET请求的数据会附在URL之后（就是把数据放置在HTTP协议头中），以?分割URL和传输数据，参数之间以&amp;amp;相连，如：login.action?name=hyddd&amp;amp;password=idontknow&amp;amp;verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字，原样发送，如果是空格，转换为+，如果是中文/其他字符，则直接把字符串用BASE64加密，得出如：%E4%BD%A0%E5%A5%BD，其中％XX中的XX为该符号以16进制表示的ASCII。&lt;/p&gt;&lt;p&gt;POST把提交的数据则放置在是HTTP包的包体中。&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;2&lt;/span&gt;."GET方式提交的数据最多只能是1024字节，理论上POST没有限制，可传较大量的数据，IIS4中最大为80KB，IIS5中为100KB"？？！&lt;/p&gt;&lt;p&gt;以上这句是我从其他文章转过来的，其实这样说是错误的，不准确的：&lt;/p&gt;&lt;p&gt;(1).首先是"GET方式提交的数据最多只能是1024字节"，因为GET是通过URL提交数据，那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上，&lt;span style="color: rgb(0, 128, 0);"&gt;URL不存在参数上限的问题，HTTP协议规范没有对URL长度进行限制。&lt;/span&gt;这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器，如Netscape、FireFox等，理论上没有长度限制，其限制取决于操作系统的支持。&lt;/p&gt;&lt;p&gt;注意这是限制是整个URL长度，而不仅仅是你的参数值数据长度。[见参考资料5]&lt;/p&gt;&lt;p&gt;(2).理论上讲，&lt;span style="color: rgb(0, 128, 0);"&gt;POST是没有大小限制的，HTTP协议规范也没有进行大小限制&lt;/span&gt;，说&amp;#8220;POST数据量存在80K/100K的大小限制&amp;#8221;是不准确的，POST数据是没有限制的，起限制作用的是服务器的处理程序的处理能力。&lt;/p&gt;&lt;p&gt;对于ASP程序，Request对象处理每个表单域时存在100K的数据长度限制。但如果使用Request.BinaryRead则没有这个限制。&lt;/p&gt;&lt;p&gt;由这个延伸出去，对于IIS 6.0，微软出于安全考虑，加大了限制。我们还需要注意：&lt;/p&gt;&lt;p&gt;1).IIS 6.0默认ASP POST数据量最大为200KB，每个表单域限制是100KB。&lt;br /&gt;　　　　 2).IIS 6.0默认上传文件的最大大小是4MB。&lt;br /&gt;　　　　 3).IIS 6.0默认最大请求头是16KB。&lt;br /&gt;　　IIS 6.0之前没有这些限制。[见参考资料5]&lt;/p&gt;&lt;p&gt;所以上面的80K，100K可能只是默认值而已(注：关于IIS4和IIS5的参数，我还没有确认)，但肯定是可以自己设置的。由于每个版本的IIS对这些参数的默认值都不一样，具体请参考相关的IIS配置文档。&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;3&lt;/span&gt;.在ASP中，服务端获取GET请求参数用Request.QueryString，获取POST请求参数用Request.Form。在JSP中，用request.getParameter(\"XXXX\")来获取，虽然jsp中也有request.getQueryString()方法，但使用起来比较麻烦，比如：传一个test.jsp?name=hyddd&amp;amp;password=hyddd，用request.getQueryString()得到的是：name=hyddd&amp;amp;password=hyddd。在PHP中，可以用$_GET和$_POST分别获取GET和POST中的数据，而$_REQUEST则可以获取GET和POST两种请求中的数据。值得注意的是，JSP中使用request和PHP中使用$_REQUEST都会有隐患，这个下次再写个文章总结。&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;4&lt;/span&gt;.POST的安全性要比GET的安全性高。注意：这里所说的安全性和上面GET提到的&amp;#8220;安全&amp;#8221;不是同个概念。上面&amp;#8220;安全&amp;#8221;的含义仅仅是不作数据修改，而这里安全的含义是真正的Security的含义，比如：通过GET提交数据，用户名和密码将明文出现在URL上，因为(1)登录页面有可能被浏览器缓存，(2)其他人查看浏览器的历史纪录，那么别人就可以拿到你的账号和密码了，除此之外，使用GET提交数据还可能会造成Cross-site request forgery攻击。&lt;/p&gt;&lt;p&gt;&lt;span style="color: red;"&gt;总结一下，&lt;/span&gt;&lt;span style="color: red;"&gt;Get&lt;/span&gt;&lt;span style="color: red;"&gt;是向服务器发索取数据的一种&lt;/span&gt;&lt;span style="color: red;"&gt;请求&lt;/span&gt;&lt;span style="color: red;"&gt;，而&lt;/span&gt;&lt;span style="color: red;"&gt;Post&lt;/span&gt;&lt;span style="color: red;"&gt;是向服务器提交数据的一种&lt;/span&gt;&lt;span style="color: red;"&gt;请求&lt;/span&gt;&lt;span style="color: red;"&gt;，在FORM（表单）中，Method默认为"GET"，实质上，GET和POST只是发送机制不同，并不是一个取一个发！&lt;/span&gt;&lt;/p&gt; &#xD;
&lt;img src="http://www.cnblogs.com/SAL2928/aggbug/2126952.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SAL2928/archive/2011/08/04/2126952.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SAL2928/archive/2011/07/16/2108198.html</id><title type="text">【转】List&amp;lt;T&amp;gt;的Sort,Find,Exists等的使用</title><summary type="text">List&amp;lt;Person&amp;gt; lstPerson = new List&amp;lt;Person&amp;gt;();lstPerson.Add(new Person(1, &amp;quot;puma&amp;quot;, 10));lstPerson.Add(new Person(2, &amp;quot;F6 Team&amp;quot;, 20));lstPerson.Add(new Person(3, &amp;quot;ASP.NET&amp;quot;, 30));lstPerson.Add(new Person(4, &amp;quot;Dotblogs&amp;quot;, 40));//List&amp;lt;T&amp;gt;.Find()//找出Name</summary><published>2011-07-16T06:53:00Z</published><updated>2011-07-16T06:53:00Z</updated><author><name>SAL</name><uri>http://www.cnblogs.com/SAL2928/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SAL2928/archive/2011/07/16/2108198.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SAL2928/archive/2011/07/16/2108198.html"/><content type="html">&lt;p&gt;List&amp;lt;Person&amp;gt; lstPerson = new List&amp;lt;Person&amp;gt;();&lt;br /&gt;lstPerson.Add(new Person(1, "puma", 10));&lt;br /&gt;lstPerson.Add(new Person(2, "F6 Team", 20));&lt;br /&gt;lstPerson.Add(new Person(3, "ASP.NET", 30));&lt;br /&gt;lstPerson.Add(new Person(4, "Dotblogs", 40));&lt;/p&gt;&lt;p&gt;//List&amp;lt;T&amp;gt;.Find()&lt;br /&gt;//找出Name='puma'的Person&lt;br /&gt;lstPerson.Find(delegate(Person p) { return p.Name == "puma"; });&lt;/p&gt;&lt;p&gt;//List&amp;lt;T&amp;gt;.FindAll()&lt;br /&gt;//找出Age&amp;gt;10&lt;br /&gt;lstPerson.FindAll(delegate(Person p) { return p.Age &amp;gt; 10; });&lt;/p&gt;&lt;p&gt;//List&amp;lt;T&amp;gt;.Exists()&lt;br /&gt;//檢查Name='F6'是否存在&lt;br /&gt;lstPerson.Exists(delegate(Person p) { return p.Name == "F6"; });&lt;/p&gt;&lt;p&gt;//List&amp;lt;T&amp;gt;.Sort()&lt;br /&gt;//依Name升序排序&lt;br /&gt;lstPerson.Sort(delegate(Person p1, Person p2) { return Comparer&amp;lt;string&amp;gt;.Default.Compare(p1.Name, p2.Name); });&lt;/p&gt;&lt;p&gt;//List&amp;lt;T&amp;gt;.Sort()&lt;br /&gt;//依Name降序排序&lt;br /&gt;lstPerson.Sort(delegate(Person p1, Person p2) { return Comparer&amp;lt;string&amp;gt;.Default.Compare(p2.Name, p1.Name); });&lt;/p&gt;&lt;p&gt;有一个list，格式如list&amp;lt;userType&amp;gt;, 但是这个userType并没有继承自ICompare或者IComparable 等，那如何给这个list排序那？&lt;br /&gt;指定一个类 这个类要继承自ICompare&amp;lt;userType&amp;gt;&lt;br /&gt;public class SortUserGroup:IComparer&amp;lt;UserGroup&amp;gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Sort by AccountID and UserGroupName&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="userGroup1"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="userGroup2"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int IComparer&amp;lt;UserGroupEntityAccess&amp;gt;.Compare(UserGroup userGroup1, UserGroup userGroup2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (userGroup1 != null &amp;amp;&amp;amp; userGroup2 != null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (userGroup1.AccountID == userGroup2.AccountID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return userGroup1.UserGroupName.CompareTo(userGroup2.UserGroupName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return userGroup1.AccountID &amp;gt; userGroup2.AccountID ? 1 : -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;然后：&lt;br /&gt;SortUserGroup sortGroup = new SortUserGroup();&lt;br /&gt;List&amp;lt;UserGroup&amp;gt;.Sort(sortUserGroup)&lt;br /&gt;这里是按照UserGroup的AccountID 和 UserGroupName 两个字段排序。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SAL2928/aggbug/2108198.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SAL2928/archive/2011/07/16/2108198.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SAL2928/archive/2011/07/16/2108165.html</id><title type="text">【转】两个.NET批量上传控件</title><summary type="text">HtmlInputFiles控件此控件支持多个文件同时上传，而且上传文件的数量、大小及格式可以根据自己的需要进行设置，并且使用非常简单。HtmlInputFiles控件下载 1、HtmlInputFiles控件属性 下图是该控件的主要属性： 属性名 功能 FileFilter 设置上传文件的类型 MaxCount 设置最多可以上传几个文件 RecordCount 设置上传控件的初始值 FileSize 设置上传文件的大小 其它属性的功能一目了然，就不介绍了。 2、HtmlInputFiles控件运用 下图为该控件使用中的截图 “添加上传”按钮用来增加上传附件，“减少上传”按钮用来减少上传附件。</summary><published>2011-07-16T06:06:00Z</published><updated>2011-07-16T06:06:00Z</updated><author><name>SAL</name><uri>http://www.cnblogs.com/SAL2928/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SAL2928/archive/2011/07/16/2108165.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SAL2928/archive/2011/07/16/2108165.html"/><content type="html">&#xD;
&lt;p&gt;&lt;strong&gt;HtmlInputFiles控件&lt;/strong&gt;&lt;br /&gt;&lt;font face="宋体"&gt;此控件支持多个文件同时上传，而且上传文件的数量、大小及格式可以根据自己的需要进行设置，并且使用非常简单。&lt;br /&gt;&#xD;
&lt;a href="http://files.cnblogs.com/dreamof/eHtmlInputFile.rar" target="_blank"&gt;&lt;font color="#1d58d1"&gt;HtmlInputFiles控件下载&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&#xD;
&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;font face="宋体"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;HtmlInputFiles&lt;span style="font-family: 宋体;"&gt;控件属性&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;　　下图是该控件的主要属性：&lt;br /&gt;&#xD;
&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/dreamof/HtmlInputFile1.jpg" width="519" height="469" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;　　属性名&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;功能&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;FileFilter&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;设置上传文件的类型&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;MaxCount&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;设置最多可以上传几个文件&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp; 　RecordCount&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;设置上传控件的初始值&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;FileSize&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;设置上传文件的大小&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;　　其它属性的功能一目了然，就不介绍了。&lt;/span&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;HtmlInputFiles&lt;span style="font-family: 宋体;"&gt;控件运用&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;　　下图为该控件使用中的截图&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/dreamof/HtmlInputFile2.jpg" width="424" height="303" /&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;　　&amp;#8220;添加上传&amp;#8221;按钮用来增加上传附件，&amp;#8220;减少上传&amp;#8221;按钮用来减少上传附件。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;　　&lt;strong&gt;具体使用如下:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体;"&gt;　　&lt;strong&gt;前台代码：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;cc1&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;HtmlInputFiles&lt;/span&gt; &lt;br /&gt;&#xD;
&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="HtmlInputFiles1"&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: red;"&gt;AddButtonVisible&lt;/span&gt;&lt;span style="color: blue;"&gt;="True"&lt;/span&gt; &lt;span style="color: red;"&gt;MaxCount&lt;/span&gt;&lt;span style="color: blue;"&gt;="15"&lt;/span&gt; &lt;span style="color: red;"&gt;RecordCount&lt;/span&gt;&lt;span style="color: blue;"&gt;="1"&lt;/span&gt; &lt;span style="color: red;"&gt;FileFilter&lt;/span&gt;&lt;span style="color: blue;"&gt;=".GIF|.JPG|.JPEG|.RAR|.TXT"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;br&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Button&lt;/span&gt; &lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="BtnUpfile"&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: red;"&gt;onclick&lt;/span&gt;&lt;span style="color: blue;"&gt;="BtnUpfile_Click"&lt;/span&gt; &lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: 新宋体; font-size: 9pt;"&gt;上 传"&lt;/span&gt;&lt;span style="font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 新宋体; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;　　&lt;strong&gt;后台代码：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;strong&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;BtnUpfile_Click(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.HtmlInputFiles1.CheckAllPostedFile(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;))&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.HtmlInputFiles1.RecordCount;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;++&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.IO.FileInfo&amp;nbsp;info&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;FileInfo(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.HtmlInputFiles1[i].PostedFile.FileName);&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;fileName&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;info.Name;&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;filePath&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;UpLoads/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;System.Guid.NewGuid().ToString()&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;fileName;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.HtmlInputFiles1[i].PostedFile.SaveAs(Server.MapPath(filePath));&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;/strong&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/font&gt;&#xD;
&lt;p&gt;&lt;strong&gt;SWfUpload控件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SWfUpload控件SWFUpload使用一个Flash影片来控制文件的选择和上传。此FLASH中包含一个用户自定制UI的按钮，点击该按钮能够激活Flash本身的高级文件上传对话框，它能够根据用户的设置来进行单文件或者是多文件的上传。 &lt;/p&gt;&#xD;
&lt;p&gt;SWFUpload由4部分组成：&lt;/p&gt;&#xD;
&lt;ol&gt;&lt;li&gt;初始化和设置(Javascript) &lt;/li&gt;&lt;li&gt;JavaScript 库: SWFUpload.js &lt;/li&gt;&lt;li&gt; SWFUpload.swf(V2.2.0版本放弃了对flash 8的支持) &lt;/li&gt;&lt;li&gt;事件处理(Javascript) &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;SWFpload必须在页面中初始化，一般可以在window.onload事件中完成此操作。它的构造函数需要一个Object类型的设置对象。 这个设置对象一般是一个直接定义的Object类型变量，直接传递给SWFUpload的构造函数。&lt;/p&gt;&#xD;
&lt;p&gt;初始化的SWFUpload对象的引用需要保留下来，因为当显示文件选择对话框和启动文件上传的时候需要这个实例的引用。&lt;/p&gt;&#xD;
&lt;p&gt;别的就不多说了，相关的介绍网上很多，可以自己查阅一下&lt;/p&gt;&#xD;
&lt;p&gt;SWFUpload控件是个组件，自己使用时并没有实现上传图片的水印效果，只是实现了文件上传功能 （嘿嘿学的比较浅薄）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;说一下主要步骤&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;一、&lt;/strong&gt;上传文件需要 要两个页面一个是Default.aspx 还有一个是upload.aspx&lt;/p&gt;&#xD;
&lt;p&gt;在工程里添加新建项选文件夹 分别添加Flash ，js，images 三个文件夹&lt;/p&gt;&#xD;
&lt;p&gt;就我的理解简单说一下： Default页面主要进行页面初始化，而upload页面主要执行文件上传&lt;/p&gt;&#xD;
&lt;p&gt;Flash文件夹中存放swfupload.swf 文件， js文件夹存放handlers.js 、swfupload.js文件，images文件夹主要存放按钮图片swfupload_uploadBtn.png（随便其他按钮图片也行要和初始化文件路径中的一致）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;二、&lt;/strong&gt;以上所需文件都需要从网上下载下载一个SWFUpload组件的demo里面会包含我们所需的文件&lt;/p&gt;&#xD;
&lt;p&gt;当然Default新建项目会有，upload页面需要自己去添加 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;提醒下两个页面最好不要从下载的SWFUpload的demo中附加 那样应该不能实现功能 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Default.aspx代码&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;head runat="server"&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;scriptsrc="js/swfupload.js"type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;script src="js/handlers.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;var swfu;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;window.onload = function() {&lt;/p&gt;&#xD;
&lt;p align="left"&gt;swfu = new SWFUpload({&lt;/p&gt;&#xD;
&lt;p align="left"&gt;// 后台设置&lt;/p&gt;&#xD;
&lt;p align="left"&gt;upload_url: "upload.aspx", // 文件上传的处理程序,就是说，你要在这个文件对上传这个动作进行定义，比如文件保存、重命名之类的，&lt;/p&gt;&#xD;
&lt;p align="left"&gt;//如果这个没有具体动作的话，文件不会在服务器上有任何踪迹，即文件不会上传。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;post_params: {&lt;/p&gt;&#xD;
&lt;p align="left"&gt;"ASPSESSID": "&amp;lt;%=Session.SessionID %&amp;gt;"&lt;/p&gt;&#xD;
&lt;p align="left"&gt;},&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;//文件上传设置&lt;/p&gt;&#xD;
&lt;p align="left"&gt;file_size_limit: "2 MB", //上传大小 单位M&lt;/p&gt;&#xD;
&lt;p align="left"&gt;file_types: "*.*", //上传文件类型&lt;/p&gt;&#xD;
&lt;p align="left"&gt;file_types_description: "所有文件类型", //文件类型描述&lt;/p&gt;&#xD;
&lt;p align="left"&gt;file_upload_limit: "0",&amp;nbsp;&amp;nbsp;&amp;nbsp; //一次性上传文件个数 0表示没有限制 &lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;// 事件处理设置 - these functions as defined in Handlers.js&lt;/p&gt;&#xD;
&lt;p align="left"&gt;file_queue_error_handler: fileQueueError,&lt;/p&gt;&#xD;
&lt;p align="left"&gt;file_dialog_complete_handler: fileDialogComplete,&lt;/p&gt;&#xD;
&lt;p align="left"&gt;upload_progress_handler: uploadProgress,&lt;/p&gt;&#xD;
&lt;p align="left"&gt;upload_error_handler: uploadError,&lt;/p&gt;&#xD;
&lt;p align="left"&gt;upload_success_handler: uploadSuccess,&lt;/p&gt;&#xD;
&lt;p align="left"&gt;upload_complete_handler: uploadComplete,&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;//按钮设置&lt;/p&gt;&#xD;
&lt;p align="left"&gt;//&lt;strong&gt;这里注意查看自己按钮图片路径是否正确&amp;nbsp; &lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&#xD;
&lt;p align="left"&gt;button_image_url: "images/swfupload_uploadBtn.png",&lt;/p&gt;&#xD;
&lt;p align="left"&gt;button_placeholder_id: "spanButtonPlaceholder",&lt;/p&gt;&#xD;
&lt;p align="left"&gt;button_width: 200,&lt;/p&gt;&#xD;
&lt;p align="left"&gt;button_height: 22,&lt;/p&gt;&#xD;
&lt;p align="left"&gt;button_text: '&amp;lt;span &amp;gt;Select File &amp;lt;span &amp;gt;(2MB Max)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;',&lt;/p&gt;&#xD;
&lt;p align="left"&gt;button_text_style: '.button { font-family: Helvetica, Arial, sans-serif; font-size: 14pt; } .buttonSmall { font-size: 10pt; }',&lt;/p&gt;&#xD;
&lt;p align="left"&gt;button_text_top_padding: 1,&lt;/p&gt;&#xD;
&lt;p align="left"&gt;button_text_left_padding: 400,&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;// Flash 设置查看&lt;strong&gt;自己flash文件路径是否正确&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;flash_url: "../Flash/swfupload.swf", // Relative to this file&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;custom_settings: {&lt;/p&gt;&#xD;
&lt;p align="left"&gt;upload_target: "divFileProgressContainer"&lt;/p&gt;&#xD;
&lt;p align="left"&gt;},&lt;/p&gt;&#xD;
&lt;p align="left"&gt;// Debug Settings&lt;/p&gt;&#xD;
&lt;p align="left"&gt;debug: false&lt;/p&gt;&#xD;
&lt;p align="left"&gt;}); &lt;/p&gt;&#xD;
&lt;p align="left"&gt;}&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;/head&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;body&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;form id="form1" runat="server"&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;div id="header"&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;h1 id="logo"&amp;gt;&amp;lt;a href="../"&amp;gt;SWFUpload&amp;lt;/a&amp;gt;&amp;lt;/h1&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;div id="version"&amp;gt;v2.2.0&amp;lt;/div&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;div id="content"&amp;gt; &lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;div id="swfu_container" style="margin: 0px 10px;"&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;div&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;span id="spanButtonPlaceholder"&amp;gt;&amp;lt;/span&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;div id="divFileProgressContainer" style="height: 75px;"&amp;gt;&amp;lt;/div&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;/form&amp;gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;/body&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;后台文件不需要设置&lt;/p&gt;&#xD;
&lt;p&gt;下面设置upload.aspx.cs后台方法&lt;/p&gt;&#xD;
&lt;p align="left"&gt;protected void Page_Load(object sender, EventArgs e)&lt;/p&gt;&#xD;
&lt;p align="left"&gt;{&lt;/p&gt;&#xD;
&lt;p align="left"&gt;#region&lt;/p&gt;&#xD;
&lt;p align="left"&gt;try&lt;/p&gt;&#xD;
&lt;p align="left"&gt;{&lt;/p&gt;&#xD;
&lt;p align="left"&gt;// Get the data&lt;/p&gt;&#xD;
&lt;p align="left"&gt;HttpPostedFile jpeg_image_upload=Request.Files["Filedata"];&lt;/p&gt;&#xD;
&lt;p align="left"&gt;//获取上传文件后缀&lt;/p&gt;&#xD;
&lt;p align="left"&gt;string FileExtension= jpeg_image_upload.FileName.Substring&lt;/p&gt;&#xD;
&lt;p align="left"&gt;(jpeg_image_upload.FileName.LastIndexOf("."),jpeg_image_upload.FileName.Length-jpeg_image_upload.FileName.LastIndexOf("."));&lt;/p&gt;&#xD;
&lt;p align="left"&gt;//自定义文件名称&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Random rd = new Random();&lt;/p&gt;&#xD;
&lt;p align="left"&gt;int num1 = rd.Next(1000, 9999);&lt;/p&gt;&#xD;
&lt;p align="left"&gt;string Filename=&amp;nbsp; num1.ToString()+ FileExtension;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;//文件上传路径 配置文件中设置 与FileUpload控件道理相同&lt;/p&gt;&#xD;
&lt;p align="left"&gt;string FileUploadPath = ConfigurationManager.AppSettings["FileUploadPath"];&lt;/p&gt;&#xD;
&lt;p align="left"&gt;//文件上传&lt;/p&gt;&#xD;
&lt;p align="left"&gt;jpeg_image_upload.SaveAs(FileUploadPath+Filename);&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Response.StatusCode = 200;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Response.Write("文件处理完毕！");&lt;/p&gt;&#xD;
&lt;p align="left"&gt;}&lt;/p&gt;&#xD;
&lt;p align="left"&gt;catch&lt;/p&gt;&#xD;
&lt;p align="left"&gt;{&lt;/p&gt;&#xD;
&lt;p align="left"&gt;// If any kind of error occurs return a 500 Internal Server &lt;/p&gt;&#xD;
&lt;p align="left"&gt;error&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Response.StatusCode = 500;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Response.Write("未知错误！");&lt;/p&gt;&#xD;
&lt;p align="left"&gt;}&lt;/p&gt;&#xD;
&lt;p align="left"&gt;finally&lt;/p&gt;&#xD;
&lt;p align="left"&gt;{&lt;/p&gt;&#xD;
&lt;p align="left"&gt;// Clean up&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Response.End();&lt;/p&gt;&#xD;
&lt;p align="left"&gt;}&lt;/p&gt;&#xD;
&lt;p align="left"&gt;#endregion&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;br /&gt;&#xD;
附：&lt;a href="http://files.cnblogs.com/SAL2928/applicationdemo.net.zip"&gt;DEMO下载&lt;/a&gt;&lt;/p&gt; &#xD;
&lt;img src="http://www.cnblogs.com/SAL2928/aggbug/2108165.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SAL2928/archive/2011/07/16/2108165.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SAL2928/archive/2011/06/29/2093056.html</id><title type="text">【转】WebResource.axd 无效的视图状态</title><summary type="text">在 ASP.net 构建的Web页面中，查看源文件，我们经常会看到下面的Html文本&amp;lt;script src=&amp;quot;/WebResource.axd?d=QfRKDnWw93T08KaF3ioSKQ2&amp;amp;t=633313193233609691&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script src=&amp;quot;/WebResource.axd?d=9iVKU5SS0wd5al1SYg8zjL8XXbP97LbENHerY4aLtJk1&amp;amp;t=633313193233609691&amp;q</summary><published>2011-06-29T02:42:00Z</published><updated>2011-06-29T02:42:00Z</updated><author><name>SAL</name><uri>http://www.cnblogs.com/SAL2928/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SAL2928/archive/2011/06/29/2093056.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SAL2928/archive/2011/06/29/2093056.html"/><content type="html">&#xD;
在 ASP.net&amp;nbsp; 构建的Web页面中，查看源文件，我们经常会看到下面的Html文本&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;lt;script src="/WebResource.axd?d=QfRKDnWw93T08KaF3ioSKQ2&amp;amp;t=633313193233609691" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script src="/WebResource.axd?d=9iVKU5SS0wd5al1SYg8zjL8XXbP97LbENHerY4aLtJk1&amp;amp;t=633313193233609691" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;&#xD;
&amp;nbsp; 这是 ASP.net 2.0 提供的新的资源管理方式产生的脚本。&lt;br /&gt;&#xD;
&amp;nbsp; 使用 WebResource管理资源时， 我们会经常收到类似下面的异常： &lt;br /&gt;&#xD;
&amp;nbsp; System.Web.HttpException: 无效的视图状态。 &lt;br /&gt;&#xD;
&amp;nbsp; System.Security.Cryptography.CryptographicException: 填充无效，无法被移除。&lt;br /&gt;&#xD;
&amp;nbsp; &lt;span style="color: red;"&gt;这是因为 WebResource.axd URL 的参数具有时效性，但是对于搜索引擎的爬虫来说，他们会经常访问这些参数过期的地址，所以就会出现上面的异常。 (本人查看自己服务器上的IIS日志后发现是对的，即出错的那个时间点和文件名与IIS日志上对比后发现访问它的是Google的爬虫)&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp; 这个问题的解决方案，目前没有更好的方案，微软论坛中只是建议在robots.txt 文件中增加下面的信息： &lt;br /&gt;&#xD;
&amp;nbsp; User-agent: * &lt;br /&gt;&#xD;
&amp;nbsp; Disallow: /*.axd$ &lt;br /&gt;&#xD;
&amp;nbsp; 但是这要求遵循 robots.txt 规范的爬虫们下次获得最新的 robots.txt 才会起作用。而对于那些不遵循 robots.txt 规范的爬虫，可一点办法都没有。 &lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;nbsp; 我现在的想法是，能不用 WebResource.axd 就不要用，因为国内不遵循robots.txt 规范的爬虫们太多了。这就需要我们来分析那些场景使用了 WebResource.axd 中的资源，也就是 需要对 WebResource.axd 的格式进行分析。 &lt;br /&gt;&#xD;
&amp;nbsp; WebResource.axd 的 URL 的格式是： &lt;br /&gt;&#xD;
&amp;nbsp; WebResource.axd?d=encrypted 标识符 &amp;amp; T = 时间戳值。 &lt;br /&gt;&#xD;
其中： &lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp; " d " 代表请求 Web 资源。 (encrypted identifier) &lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp; " t " 是 timestamp 对程序集, 这有助于在确定如果已经对资源的更改请求。&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; t 参数对于我们分析谁使用它，没有意义，我们下面就来分析 d 参数。 &lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; d 参数的解析代码如下：&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;lt;%@ Page Language="C#" AutoEventWireup="true" %&amp;gt; &amp;lt;script runat="server"&amp;gt; public static string PageDecryptString(string input) { Type type = typeof(System.Web.UI.Page); object o = Activator.CreateInstance(type); System.Reflection.MethodInfo mi = type.GetMethod("DecryptString", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static, null, new Type[] { typeof(string) }, null); object result = mi.Invoke(o, new object[] { input }); return result.ToString(); } protected void btn_Post_Click(object sender, EventArgs e) { this.l_Info.Text = PageDecryptString(HttpUtility.UrlDecode(tb_WebResourceDValue.Text)); } &amp;lt;/script&amp;gt; &amp;lt;html xmlns="&lt;a href="http://www.w3.org/1999/xhtml" target="_blank"&gt;&lt;font color="#133db6"&gt;http://www.w3.org/1999/xhtml&lt;/font&gt;&lt;/a&gt;"&amp;gt; &amp;lt;body&amp;gt; &amp;lt;form id="form1" runat="server"&amp;gt; &amp;lt;asp:TextBox ID="tb_WebResourceDValue" runat="server" /&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;asp:Label ID="l_Info" runat="server" /&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;asp:Button ID="btn_Post" runat="server" Text="计算" OnClick="btn_Post_Click" /&amp;gt; &amp;lt;/form&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt;&lt;br /&gt;&#xD;
&amp;nbsp; 我们在 C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\web.config 文件中，可以看到 WebResource.axd 文件是配置的通过下面 HttpHandle 来解析的： &lt;br /&gt;&#xD;
&amp;nbsp; &amp;lt;add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True"/&amp;gt; &lt;br /&gt;&#xD;
&amp;nbsp; 在 System.Web.Handlers.AssemblyResourceLoader 类中，使用 Reflector 工具看，又可以看到下面代码：&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
void IHttpHandler.ProcessRequest(HttpContext context) { // ...&amp;nbsp; string str = context.Request.QueryString["d"]; // ....&amp;nbsp; string str2 = Page.DecryptString(str); // ... }&lt;br /&gt;&#xD;
&amp;nbsp; 显然， d 的参数， 是应该通过 Page.DecryptString 函数来解析的。 &lt;br /&gt;&#xD;
&amp;nbsp; 而 Page.DecryptString 函数 中，涉及到调用 web 配置中配置的默认加密key。 简单起见，我们这里的解析方法就用 ASP.net 页面来实现了。由于 Page.DecryptString 函数是 internal static 的，我们上面代码就用反射来调用这个函数，就会获得我们期望的值。 &lt;br /&gt;&#xD;
&amp;nbsp; （为了保证解密算法的解密key一致，最简单的做法就是我们把上面这个解密ASPX页面跟需要解析的放在同一个服务器上） &lt;br /&gt;&#xD;
&amp;nbsp; 上面 的 QfRKDnWw93T08KaF3ioSKQ2 解密的结果是： s|WebForms.js 竖线只是用于分隔字符串中不同的值。&amp;#8220;s&amp;#8221;表示该数据为脚本，&amp;#8220;WebForms.js&amp;#8221;是要检索的资源名称。WebForms.js 资源可从 System.Web.dll 检索。 &lt;br /&gt;&#xD;
&amp;nbsp; 同理上面 的 9iVKU5SS0wd5al1SYg8zjL8XXbP97LbENHerY4aLtJk1 解密的结果是 ： s|WebUIValidation.js &lt;br /&gt;&#xD;
&amp;nbsp; 显然如果出现这样的 WebResource.axd 调用,应该是验证控件在调用. &lt;br /&gt;&#xD;
&amp;nbsp; 我们要想上面的 &lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&amp;lt;script src="/WebResource.axd?d=QfRKDnWw93T08KaF3ioSKQ2&amp;amp;t=633313193233609691" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script src="/WebResource.axd?d=9iVKU5SS0wd5al1SYg8zjL8XXbP97LbENHerY4aLtJk1&amp;amp;t=633313193233609691" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&#xD;
&amp;nbsp; 不出现，就需要让调用 WebForms.js ， WebUIValidation.js 脚本的验证控件不使用。 &#xD;
&lt;img src="http://www.cnblogs.com/SAL2928/aggbug/2093056.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SAL2928/archive/2011/06/29/2093056.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SAL2928/archive/2011/02/10/1950617.html</id><title type="text">【总结】从客户端请求页面(aspx)到web服务器上执行的过程</title><summary type="text">看了两个前辈的文章《ASP.NET架构分析》、《浅谈ASP.NET的内部机制(一)》，自己做的一些总结，不过也不知道是否完全正确，有错误的地方希望牛人可以指出！执行顺序为：1、客户端请求web页(如：aspx页)--&amp;amp;gt;2、IIS服务器中的http.sys(验证请求的url，阻止了不合法的url请求，减轻了服务器的压力)--&amp;amp;gt;3、IIS是只能识别.html文件的，当IIS遇到非.html时(如aspx)，IIS将其交给ISAPI筛选器来处理--&amp;amp;gt;4、ASP.NET服务在注册到IIS的时候，会把每个扩展可以处理的文件扩展名注册到IIS里面（如：*.aspx</summary><published>2011-02-10T03:07:00Z</published><updated>2011-02-10T03:07:00Z</updated><author><name>SAL</name><uri>http://www.cnblogs.com/SAL2928/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SAL2928/archive/2011/02/10/1950617.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SAL2928/archive/2011/02/10/1950617.html"/><content type="html">&lt;p&gt;看了两个前辈的文章《&lt;a href="http://www.cnblogs.com/xieex/archive/2007/10/29/941300.html" target="_blank"&gt;ASP.NET架构分析&lt;/a&gt;》、《&lt;a href="http://www.cnblogs.com/yanyangtian/archive/2009/02/21/1395473.html" target="_blank"&gt;浅谈ASP.NET的内部机制(一)&lt;/a&gt;》，自己做的一些总结，不过也不知道是否完全正确，有错误的地方希望牛人可以指出！&lt;/p&gt;&#xD;
&lt;p&gt;执行顺序为：&lt;/p&gt;&#xD;
&lt;p&gt;1、客户端请求web页(如：aspx页)--&amp;gt;2、IIS服务器中的http.sys(验证请求的url，阻止了不合法的url请求，减轻了服务器的压力)--&amp;gt;3、IIS是只能识别.html文件的，当IIS遇到非.html时(如aspx)，IIS将其交给ISAPI筛选器来处理--&amp;gt;&amp;nbsp;4、ASP.NET服务在注册到IIS的时候，会把每个扩展可以处理的文件扩展名注册到IIS里面（如：*.aspx,*.php等），扩展启动后，就根据定义好的方式来处理IIS所不能处理的文件，然后把控制权跳转到专门处理代码的进程中（如*.aspx由aspnet_isapi.dll来处理）--&amp;gt;5、由aspnet_isapi.dll进入ASP.NET运行时&lt;/p&gt;&#xD;
&lt;p&gt;说明：第4步因为.net与系统结合所以在ISAPI筛选器没有体现。比如要支持php页面，应先在ISAPI筛选器添加执行文件，然后再到ISAPI扩展里面添加扩展名.php。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;以上让我们了解了客户端是如何和服务器端进行交互的，下面我们可以来看看服务器端到底是怎样来处理客户端的请求(也就是接第5步后的处理过程)：&lt;/p&gt;&#xD;
&lt;p&gt;未完待续......&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其它说明：&lt;/p&gt;&#xD;
&lt;p&gt;aspnet_isapi.dll执行aspx页面，他可以做两件事，先执行ISAPI过滤器的一些操作,如验证权限，用户名密码等，再执行aspx页面。&lt;/p&gt;&#xD;
&lt;p&gt;1、ISAPI过滤器可以在web.config进行配置，对应节点为&amp;lt;httpModules&amp;gt;&amp;lt;/httpModules&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;2、ISAPI扩展可以在web.config进行配置，对应节点为&amp;lt;httpHandlers&amp;gt;&amp;lt;/httpHandlers&amp;gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/SAL2928/aggbug/1950617.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SAL2928/archive/2011/02/10/1950617.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SAL2928/archive/2011/01/30/1947824.html</id><title type="text">【转】检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,8000401a错误解决方案</title><summary type="text">在编写生成Excel 程序在win 20003 运行里，遇到了&amp;amp;#8220;检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败，原因是出现以下错误: 8000401a。 的错误.&amp;amp;#8221;问题，在网上主要解决办法为两种：1、http://support.microsoft.com/kb/2883662、解决方法如下:1:在服务器上安装office的Excel软件.2:在&amp;quot;开始&amp;quot;-&amp;amp;gt;&amp;quot;运行&amp;quot;中输入dcomcnfg.exe启动&amp;quot;组件服务</summary><published>2011-01-30T05:52:00Z</published><updated>2011-01-30T05:52:00Z</updated><author><name>SAL</name><uri>http://www.cnblogs.com/SAL2928/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SAL2928/archive/2011/01/30/1947824.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SAL2928/archive/2011/01/30/1947824.html"/><content type="html">&lt;p&gt;在编写生成Excel 程序在win 20003 运行里，遇到了&amp;#8220;检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败，原因是出现以下错误: 8000401a。 的错误.&amp;#8221;问题，在网上主要解决办法为两种：&lt;/p&gt;&#xD;
&lt;p&gt;1、&lt;font face="Verdana"&gt;&lt;a href="http://support.microsoft.com/kb/288366"&gt;http://support.microsoft.com/kb/288366&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2、&amp;nbsp;&lt;span style="font-size: 9pt"&gt;解决方法如下:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;1:&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;在服务器上安装office的Excel软件.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;2:&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;在&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;开始"&lt;/span&gt;-&amp;gt;&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;运行"&lt;/span&gt;中输入dcomcnfg.exe启动&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;组件服务"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;3:&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;依次双击&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;组件服务"&lt;/span&gt;-&amp;gt;&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;计算机"&lt;/span&gt;-&amp;gt;&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;我的电脑"&lt;/span&gt;-&amp;gt;&lt;span style="color: maroon"&gt;"DCOM&lt;/span&gt;&lt;span style="color: maroon"&gt;配置"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;4:&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;在&lt;span style="color: maroon"&gt;"DCOM&lt;/span&gt;&lt;span style="color: maroon"&gt;配置"&lt;/span&gt;中找到&lt;span style="color: maroon"&gt;"Microsoft Excel &lt;/span&gt;&lt;span style="color: maroon"&gt;应用程序"&lt;/span&gt;,在它上面点击右键,然后点击&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;属性"&lt;/span&gt;,弹出&lt;span style="color: maroon"&gt;"Microsoft Excel &lt;/span&gt;&lt;span style="color: maroon"&gt;应&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;用程序属性&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;对话框&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;5:&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;点击&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;标识"&lt;/span&gt;标签,选择&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;交互式用户"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;6:&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;点击&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;安全"&lt;/span&gt;标签,在&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;启动和激活权限"&lt;/span&gt;上点击&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;自定义"&lt;/span&gt;,然后点击对应的&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;编辑"&lt;/span&gt;按钮,在弹出的&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;安全性"&lt;/span&gt;对话框中填加&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;一个&lt;span style="color: maroon"&gt;"NETWORK SERVICE"&lt;/span&gt;用户(注意要选择本计算机名),并给它赋予&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;本地启动"&lt;/span&gt;和&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;本地激活"&lt;/span&gt;权限.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;7:&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;依然是&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;安全"&lt;/span&gt;标签,在&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;访问权限"&lt;/span&gt;上点击&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;自定义"&lt;/span&gt;,然后点击&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;编辑"&lt;/span&gt;,在弹出的&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;安全性"&lt;/span&gt;对话框中也填加一个&lt;span style="color: maroon"&gt;"NETWORK&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;SERVICE&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: maroon; font-size: 9pt"&gt;用户,然后赋予"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;本地访问&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;span style="color: maroon"&gt;权限.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;这样,我们便配置好了相应的Excel的DCOM权限.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;注意:这是在WIN2003上配置的,在2000,xp上,是配置ASPNET用户&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;由于EXCEL是在服务器上打开的，所以应该写一个把导出数据保存在服务器上,然后再传递给客户端的方法,最后每次调&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9pt"&gt;用这个功能的时候再删除以前在服务器上所生成的所有Excel&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9pt"&gt;----------&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9pt"&gt;我的结果以上两种方法，都不行。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9pt"&gt;参考多数资料：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9pt"&gt;简单的记录下自己我解决方法：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9pt"&gt;1、创建一个用户账号，设置所属于Power User或者User、&lt;font size="2"&gt;直接用系统登陆帐号和密码也行&lt;/font&gt;; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9pt"&gt;2、运行DCOMCNFG，在Dcom组件里面找到Microsoft Excel 应用程序或者Microsoft excel文档-属性-标识里面选择&amp;#8220;特定用户&amp;#8221;，然后输入前面建立的帐号和密码就可以了；&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9pt"&gt;3、在web.config配置文件里添加一个支点&amp;lt;identity impersonate="true" userName="登陆帐号" password="密码"/&amp;gt;即可；&lt;/span&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/SAL2928/aggbug/1947824.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SAL2928/archive/2011/01/30/1947824.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
