2011年8月17日
#
Version Information: Microsoft .NET Framework Version:4.0.21006; ASP.NET Version:4.0.21006.1
在安装了Visual Studio 2010 Beta2之后,当页面输入框默认情况下输入“<”或者“>”的时候。按照访问策略,这将导致一些安全问题,诸如:跨站脚本攻击(cross -site scripting attack)。而这个问题的更准确描述则是,当你在安装了.NET Framework 4.0以上版本后,当你的应用程序以.NET Framework 4.0为框架版本,你的任意服务器请求,都将被进行服务器请求验证(ValidationRequest),这不仅包括ASP.NET,同时也包括Web Services等各种HTTP请求,不仅仅针对aspx页面,也针对HTTP Handler,HTTP Module等,因为这个验证(Valify)的过程,将会发生在BeginRequest事件之前。
基于以上原理,在ASP.NET之前的版本中,请求验证也是默认开通的,但是发生在页面级(aspx)的,并且只在请求执行的时候生效,因此,在旧的版本中,我们只需要按以下方式配置即可:
在页面级别(aspx中)设置
ValidateRequest="false"
或者
在全局级别(Web.config中)设置
view sourceprint?<configuration>
<system.web>
<pages validateRequest="false">
但是,以上设置仅对ASP.NET4.0以上有效。在ASP.NET4.0版本上,我们需要更多一行的配置:
在全局级别(Web.config中)设置
view sourceprint?<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" />
这一点其实在发生错误的页面中已经有说明了。在实际使用过程中,不仅如此,而且我发现requestValidationMode只要设置成小于 4.0就可以,比如:1.0,2.0,3.0,3.9都是可以的,错误提示中指明用2.0,目的只是说明用ASP.NET 2.0的默认方式进行工作。
原文转自:
http://www.cnblogs.com/kingteach/archive/2011/04/14/2016472.html
2011年6月1日
#
最近两天做项目,发现了一个奇怪的问题,原本使用好好的Jquery的Ajax代码突然变的不管用了,对比了所有情况最后发现原来是Jquery的版本导致
在1.2.6的版本中Ajax的Json表达式要求的格式并不是很严格{result:true,"error":""}这样的格式是可以使用的。但是到了更高级的版本,比如1.4.1以后的版本,就需要使用非常严格的Json格式了,上面的举例就必须变成{"result":"true","error":""}
经过上面的修改,以前的代码就可以继续使用了
2011年5月13日
#
单击【开始】→【程序】→【管理工具】→【IIS管理器】
逐步展开“本地计算机”、“网站”,在你的网站上右击,选择【属性】
单击“HTTP头”选项卡→单击“MIME类型”按钮,再单击“新建”按钮,在“扩展名”框内输入“.flv”,“MIME类型”框中输入“flv-application/octet-stream”
是不是太长了?其实,“MIME类型”只是一个描述,输入什么都可以,然后确定即可。
2011年5月4日
#
这两天因为工作的需要,需要做一个winform上传数据到服务器端的程序。当时第一个想法是通过webservice的方式来实现,后来觉得麻烦,想偷懒就没有用这样的方式,http的post方式变成了第一选择。因为以前用的都是httpwebrequest之类的东西进行post提交,winform下面还真的是第一次,不过很快就在网上找到了webclient这个类,接下来开始实现功能,话说webclient用起来还真的很简单,一个头信息的声明,然后是URL,最后是post的数据,就完事了。正在高兴的时候发现了一个问题。之前post的全是字符串之类的信息,可是接下来要同时post数据和文件,这个该怎么办呢,如何书写post中的数据呢?google一下找到了类似这样的帖http://www.iwms.net/n1765c12.aspx,这样帖子很多,而且大多内容都完全一样,互相转来转去的。但是大致中心思想就是让我们用流拼接的方式进行post,可是说实话我看了半天没有看懂。又懒得尝试和模仿。难道就真的没有像之前一样采用a=XXX1&b=XXXX2这样的形式进行文件和数据post的方法吗?
OK,现在问题出来了,结论是肯定的,其实之所以不能像之前那样post数据,主要的原因是无法把文件流和字符串进行拼接,那么只需要将文件流转变为字符串就OK了。顺着这个思路继续的思考。
如果你做过Flash的开发那么现在马上应该有相应的结论了,就是base64。碰巧我也是因为之前的一个Flash项目用到过Base64,所以很快的就想到了这个方法。微软的c#给我们提供了一个非常好的方法Convert.ToBase64String,可以非常容易的将byte[]转为string类型,既然有了这个方法,剩下的就是还是像以前一样拼接提交的字符串就行了。
数据到了服务器端显示request,之后用自带的Convert.FromBase64String进行转化成byte[]。
终于到了这里偷懒的同时post数据和文件到服务器上功能就实现了。
上代码
读取文件存为byte[]
FileStream fs = new FileStream("文件名", FileMode.Open, FileAccess.Read);
byte[] byteFile = new byte[fs.Length];
fs.Read(byteFile, 0, Convert.ToInt32(fs.Length));
fs.Close();
拼接提交的字符串
postData = "id=xxx&name=xxx&file=" + HttpUtility.UrlEncode(Convert.ToBase64String(byteFile));
服务器端接收信息,并保存为文件
string pic = Request["file"].ToString();
FileStream fs = new FileStream("保存的文件完整路径", FileMode.Create, FileAccess.Write);
fs.Write(Convert.FromBase64String(pic), 0, Convert.FromBase64String(pic).Length);
fs.Flush();
fs.Close();
现在想想可以省去那么多的代码真的是一件很不错的事情,向上面我们搜到的帖子内容说拜拜吧。
2011年4月27日
#
最近遇到一个项目就是要从一份word中提取出所有的图片信息,功能看起来不是很难,只要使用office自带的Microsoft.Office.Interop.Word就可以解决问题。网上也有不少的文章来说明如何去实现。不过总体来说网上的内容分为两派一个是使用剪贴板来实现,一个是通过将图片转为byte数组来完成。个人倾向于后者,但是在实践过程中遇到了问题。
问题一:通过byte的方式来实现图片的提取会导致提取出来的图片的质量严重下降,这样的图片质量下降是无法通过修改图片质量的代码来优化和提高的。目前为止我还没有想到什么办法来很好的解决,只能是换方法来实现, 不过个人猜想是因为word中图片的dpi问题导致,因为原本很小的图片导出后就会变的很大(尺寸)。所以不得不使用剪贴板的方法来实现,但是用第一种方法也会有局限性。
下面分别的贴出实现的代码
第一种,通过byte的方式,关键语句为(byte[])shape.Range.EnhMetaFileBits;
foreach(InlineShape shape in item.Range.InlineShapes)
{
if (shape.Type == WdInlineShapeType.wdInlineShapePicture)
{
//获取Word中的图片
byte[] img = (byte[])shape.Range.EnhMetaFileBits;
Bitmap bmp = new Bitmap(new MemoryStream(img));
}
}
第二种,通过剪贴板,如下
foreach (InlineShape shape in item.Range.InlineShapes)
{
//判断类型
if (shape.Type == WdInlineShapeType.wdInlineShapePicture)
{
//利用剪贴板保存数据
shape.Select(); //选定当前图片
WordApp.Selection.Copy();//copy当前图片
if (Clipboard.ContainsImage())
{
Bitmap bmp = new Bitmap(Clipboard.GetImage());
fileName = System.Guid.NewGuid() + defaultPicExtension;
bmp.Save(savePath + fileName, System.Drawing.Imaging.ImageFormat.Png);
}
}
}
问题二:通过控制台的方式编写程序可能会遇到剪贴板无法使用的事情,需要引用System.Window.Form来解决问题。
希望有经验的朋友可以帮忙解释一下第一种方法的问题所在,最后贴上实现的全部代码
private void bt_readreport_Click(object sender, EventArgs e)
{
//初始化控件值
ClearControl();
StringBuilder reportContent = new StringBuilder();
object Nothing = System.Reflection.Missing.Value;
object filename = "文件完整路径和名称";
Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
Microsoft.Office.Interop.Word.Document WordDoc = WordApp.Documents.Open(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
//循环文章中的各个章节
foreach (Paragraph item in WordDoc.Paragraphs)
{
if (item != null)
{
if (item.Range.Text.Trim() != "")
{
//判断该范围内是否存在图片
if (item.Range.InlineShapes.Count != 0)
{
foreach (InlineShape shape in item.Range.InlineShapes)
{
//判断类型
if (shape.Type == WdInlineShapeType.wdInlineShapePicture)
{
//利用剪贴板保存数据
shape.Select(); //选定当前图片
WordApp.Selection.Copy();//copy当前图片
string fileName = "";
if (Clipboard.ContainsImage())
{
Bitmap bmp = new Bitmap(Clipboard.GetImage());
fileName = System.Guid.NewGuid() + ".png";
bmp.Save(savePath + fileName, System.Drawing.Imaging.ImageFormat.Png);
}
}
}
}
//在总目录中添加相应信息
reportContent.AppendLine(item.Range.Text.Trim());
}
}
}
WordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
WordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
}
对了,Png的效果要比JPG好,而且文件也不大,推荐使用
2011年4月22日
#
摘要: 太悲剧了,写了好多的东西结果遨游挂掉了。。。这个时候我想起了office还原机制,没事从头写记得去年的时候买了一个G3手机来玩,开始的时候觉得是相当的神奇,但是随着时间的推移,程序对系统的要求越来越高,手机也慢慢的变的不堪重负,最后就变成了懒得折腾他,知道前两天听说老大将手机超频了以后才突然又有兴趣让我的Hero复活,决定开始刷机之旅因为Blog的主旨分享问题的解决过程,所以这里也和大家分享一下在刷机过程中遇到的问题问题一因为习惯了在微软大叔的光环下成长,希望了衣来伸手的生活状态,突然的转变为要什么都自己一步一步的手动进行,还真的有些不适应。所以在刚开始刷机的时候就遇到了自己不能理解的问题,具
阅读全文
2011年4月20日
#
摘要: 最近发现抓取网页数据的工作越来越多了,抓取技术,正则表达式,各种麻烦,这次又遇到了cookie的问题。首先痛恨一下那些靠cookie来变换网页内容的网站,嘿嘿在网上找了一些资料,最后整理出来了结论说结论之前先说一下cookie的层次关系,在.net中cookie的大小关系如下CookieContainer--CookieCollection--Cookie ,其中我们使用的HttpWebRequest使用的正式第一级别也就是CookieContainer,弄明白这个关系以后就可以进行相应的代码开发了1publicvoidStartClimb()2{3stringurlContent="
阅读全文
摘要: 还不错,还记得博客园的账号,看看上一次发博客已经是2008年的事情了,这几年,工作中的问题一直存在,但是却少了问题的记录,今天开始恢复了,作为积累作为分享
阅读全文
2008年6月24日
#
摘要: 如何在客户端取到服务器控件的ID呢,这个问题很久很久以前的古老程序要就说明了这个问题了,在如今的AJAX应用中我们也通过之前的这种解决办法解决了需要的问题,一个小小的ClientID搞定所有(我的第一篇Blog文件中有说明),无论控件是在自定义控件中还是在MasterPage中都可以通过ClientID轻松的获取到控件的ID。但是今天我却遇到了另外一个问题,上面的方法突然在radiobuttonl...
阅读全文
摘要: 继续项目中遇到的问题,这次是Javascript的问题了,一般的情况下我们写下面这些代码来修改一张图片的现实内容[代码]其实这样写从语法上面来讲是没有问题的,但是有的时候却不能正常的显示出图片,可是图片却明明的存在,地址也没有错误,为什么呢?[代码]问题就出现在上面这句话的void(0);如果把上面的那些代码修改为[代码]就不会出现这样的问题目前的解释可以认为是void(0)取消了图片加载的事件,...
阅读全文