asp.net 网站开发常用方法

生成验证码:

using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Drawing; 
 
public partial class CheckCode : System.Web.UI.Page 

    protected void Page_Load(object sender, EventArgs e) 
    { 
        if (!this.IsPostBack) 
        { 
            //生成验证码 
            string temp = this.GetCode(4); 
            HttpCookie cookie = new HttpCookie("yzm"); 
            cookie.Value = temp; 
            Response.Cookies.Add(cookie); 
            //画图 
            this.GetCheckCodeImage(temp); 
        } 
    } 
 
    //产生随机字符串  
    private string GetCode(int num) 
    { 
        string[] source ={ "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",  
            "K", "L", "M", "N", "O","P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" ,"a", "b", "c", "d", "e", "f", "g", "h", "i", "j",  
            "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y","z"}; 
        string code = ""; 
        Random rd = new Random(); 
        for (int i = 0; i < num; i++) 
        { 
            code += source[rd.Next(0, source.Length)]; 
        } 
        Session["ValidateCode"] = code;//将字符串保存到Session中,以便需要时进行验证   
        return code; 
 
    } 
 
 
    #region    验证码 
 
    /// <summary> 
    /// 生成验证码 
    /// </summary> 
    /// <param name="checkCode"></param> 
    private void GetCheckCodeImage(string checkCode) 
    { 
        if (checkCode == null || checkCode.Trim() == String.Empty) return; 
 
        System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)),25); 
        Graphics g = Graphics.FromImage(image); 
        try 
        { 
            Random random = new Random();     //生成随机生成器  
            g.Clear(Color.White);            //清空图片背景色 www.2cto.com
            for (int i = 0; i < 5; i++)     //画图片的背景噪音线 
            { 
                int x1 = random.Next(image.Width); 
                int x2 = random.Next(image.Width); 
                int y1 = random.Next(image.Height); 
                int y2 = random.Next(image.Height); 
                g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); 
            } 
            Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic)); 
            System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); 
            g.DrawString(checkCode, font, brush, 2, 2); 
 
            //画图片的前景噪音点 
            for (int i = 0; i < 60; i++) 
            { 
                int x = random.Next(image.Width); 
                int y = random.Next(image.Height); 
 
                image.SetPixel(x, y, Color.FromArgb(random.Next())); 
            } 
 
            //画图片的边框线 
            g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); 
            System.IO.MemoryStream ms = new System.IO.MemoryStream(); 
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
            Response.ClearContent(); 
            Response.ContentType = "image/Gif"; 
            Response.BinaryWrite(ms.ToArray()); 
        } 
        finally 
        { 
            g.Dispose(); 
            image.Dispose(); 
        } 
    } 
 
    #endregion 
 
 
}

清空缓存:

//清空客户端页面缓存 
public static void ClearClientPageCache() 

    HttpContext.Current.Response.Buffer = true; 
    HttpContext.Current.Response.Expires = 0; 
    HttpContext.Current.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1); 
    HttpContext.Current.Response.AddHeader("pragma", "no-cache"); 
    HttpContext.Current.Response.AddHeader("cache-control", "private"); 
    HttpContext.Current.Response.CacheControl = "no-cache"; 
}

分页方法:

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Text; 
using System.Text.RegularExpressions; 
 
    public class PagingCollection<T> 
    { 
        private int pagezise; 
 
        public int Pagezise 
        { 
            get { return pagezise; } 
            set { pagezise = value; } 
        } 
        private int pageindex; 
 
        public int Pageindex 
        { 
            get { return pageindex; } 
            set { pageindex = value; } 
        } 
        private int TotalCount; 
 
        public int TotalCount1 
        { 
            get { return TotalCount; } 
            set { TotalCount = value; } 
        } 
        private int TotalPage=0; 
 
        public int TotalPage1 
        { 
            get { return TotalPage; } 
            set { TotalPage = value; } 
        } 
        private string url; 
 
        public string Url 
        { 
            get { return url; } 
            set { url = value; } 
        } 
        private string urlparms; 
 
        public string Urlparms 
        { 
            get {  
             
                return urlparms; } 
            set { urlparms = value; } 
        } 
 
        /// <summary> 
        /// 分页数据构造 
        /// </summary> 
        /// <param name="source"></param> 
        /// <param name="pageindex"></param> 
        /// <param name="pagezise"></param> 
        /// <param name="totalcount"></param> 
        /// <param name="url"></param> 
        public PagingCollection(int pageindex, int pagezise, int totalcount, string url) 
        { 
            this.pageindex = pageindex; 
            this.pagezise = pagezise; 
            TotalCount = totalcount; 
            TotalPage = (int)Math.Ceiling(TotalCount / (double)pagezise); 
            this.url = url; 
 
        } 
 
        public PagingCollection(int pageindex, int pagezise, int totalcount, string url,string urlparms) 
        { 
            this.pageindex = pageindex; 
            this.pagezise = pagezise; 
            TotalCount = totalcount; 
            TotalPage = (int)Math.Ceiling(TotalCount / (double)pagezise); 
            this.url = url; 
            this.urlparms = urlparms; 
 
        } 
 
        #region 分页属性 返回分页数据 
 
        public string GetPatePar 
        { 
            get 
            { 
                if (TotalCount1 > 0) 
                { 
                    StringBuilder str = new StringBuilder(); 
                    int startpage = (pageindex - 1) / 10 * 10 + 1; 
                    int endpage = (pageindex - 1) / 10 * 10 + 10; 
                    int x = endpage > TotalPage ? TotalPage : endpage; 
                    str.Append("<div  style=‘ color:#1E5494;‘>共" + TotalPage1 + "页 /  当前第" + pageindex + "页   "); 
 
                    if (HasPreviousPage) 
                    { 
                        str.Append("<a href=" + url + "?page=1" + GetURLParms + "" + urlparms + ">首页</a> "); 
                        str.Append("<a href=" + url + "?page=" + (pageindex - 1) + GetURLParms + "" + urlparms + ">上一页</a>"); 
                    } 
                    else 
                    { 
                        str.Append("<a href=#>首页 </a>"); 
                        str.Append("<a href=#>上一页</a>"); 
                    } 
                    for (int i = startpage; i <= x; i++) 
                    { 
                        if (i == pageindex) 
                        { 
                            str.Append(string.Format("<a style=‘margin-left:3px; margin-right:3px;padding:2px 4px 2px 4px;color:red;border:1px solid #cccccc;background-color:#ffffff; ‘>" + i + "</a>")); 
                        } 
                        else 
                        { 
                            str.Append(string.Format("<a style=‘margin-left:3px; margin-right:3px;‘  href=" + url + "?page=" + i + GetURLParms + "" + urlparms + ">" + i + "</a>")); 
                        } 
                    } 
                    if (HasNextPage) 
                    { 
 
                        str.Append("<a href=" + url + "?page=" + (pageindex + 1) + GetURLParms + "" + urlparms + ">下一页 </a>"); 
                        str.Append("<a href=" + url + "?page=" + TotalPage + GetURLParms + "" + urlparms + ">尾页</a>"); 
                    } 
                    else 
                    { 
                        str.Append("<a href=#>下一页 </a>"); 
                        str.Append("<a href=#>尾页</a>"); 
                    } 
                    str.Append("</div>"); 
                    return str.ToString(); 
                } 
                else 
                { 
                    return "<font color=red>暂无数据!</font>"; 
                } 
 
            } 
        } 
 
        #endregion 
 
        /// <summary> 
        /// url重写 
        /// </summary> 
        private string GetURLParms 
        { 
            get 
            { 
                    string query = HttpContext.Current.Request.Url.Query; 
                    query = Regex.Replace(query, @"\?page=\d*", "", RegexOptions.Compiled); 
                    return query; 
               
            } 
        } 
 
        /// <summary> 
        ///判断是否有上一页 
        /// </summary> 
        public bool HasPreviousPage 
        { 
            get 
            { 
                return (pageindex > 1); 
            } 
        } 
        /// <summary> 
        ///判断是否有下一页 
        /// </summary> 
        public bool HasNextPage 
        { 
            get 
            { 
                return (pageindex < TotalPage); 
            } 
        } 
    } 
 
    /// <summary> 
    /// 分页数据类 
    /// </summary> 
    /// <typeparam name="T"></typeparam> 
    public class PageBean<T> 
    { 
 
        IList<T> datasource = new List<T>(); 
 
        public IList<T> Datasource 
        { 
            get { return datasource; } 
            set { datasource = value; } 
        } 
 
        int pagesum; 
 
        public int Pagesum 
        { 
            get { return pagesum; } 
            set { pagesum = value; } 
        } 
        public PageBean(IList<T> datasource, int pagesum) 
        { 
            this.datasource = datasource; 
            this.pagesum = pagesum; 
        } 
        public PageBean() 
        { 
            // 
            // TODO: 在此处添加构造函数逻辑 
            // 
        } 
}

生成图片水印:

using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.IO; 
using System.Drawing; 
using System.Drawing.Imaging; 
 
/// <summary> 
/// PictureHandler 的摘要说明 
/// </summary> 
    public class PicHandler : IHttpHandler 
    { 
        public void ProcessRequest(HttpContext context) 
        { 
            context.Response.ContentType = "text/plain"; 
    
            string imgUrl = context.Request.PhysicalPath;//得到当前处理图片的物理路径 
            if (File.Exists(imgUrl)) 
            { 
                Image img = Image.FromFile(imgUrl);//通过图片路径得到图片对象 
                Image watering = Image.FromFile(context.Server.MapPath("~/themes/images/water.jpg"));//得到数字水印图片 
                Graphics g = Graphics.FromImage(img);//通过图片对象创建画布 
                g.DrawImage(watering, new Rectangle(img.Width - watering.Width, img.Height - watering.Height, watering.Width, watering.Height), 0, 0, watering.Width, watering.Height, GraphicsUnit.Pixel);//画图 
                context.Response.ContentType = "image/jpeg";//设置图片的格式 
                img.Save(context.Response.OutputStream, ImageFormat.Jpeg);//把图片保存在输出流中 
                g.Dispose();//销毁画布 
                img.Dispose();//销毁图片 
                context.Response.End(); 
            } 
            else 
            { 
                Image defaultimg = Image.FromFile(context.Server.MapPath("~/themes/images/water.jpg"));//通过图片路径得到默认图片对象 
                Image watering = Image.FromFile(context.Server.MapPath("~/themes/images/water.jpg"));//得到数字水印图片 
                Graphics g = Graphics.FromImage(defaultimg);//通过图片对象创建画布 
                g.DrawImage(watering, new Rectangle(defaultimg.Width - watering.Width, defaultimg.Height - watering.Height, watering.Width, watering.Height), 0, 0, watering.Width, watering.Height, GraphicsUnit.Pixel);//画图 
 
                context.Response.ContentType = "image/jpeg";//设置图片的格式 
                defaultimg.Save(context.Response.OutputStream, ImageFormat.Jpeg); 
                g.Dispose(); 
                defaultimg.Dispose(); 
                context.Response.End(); 
            } 
 
        } 
        public bool IsReusable 
        { 
            get 
            { 
                return false; 
            } 
        } 
    }

防注入过滤:

using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Data.SqlClient; 
 
/// <summary> 
/// SqlCheck 的摘要说明 
/// </summary> 
 
    public class SqlCheck 
    { 
       
        public void CheckSql() 
        { 
           
            string jk1986_sql = "exec↓select↓drop↓alter↓exists↓union↓and↓or↓xor↓order↓mid↓asc↓execute↓xp_cmdshell↓insert↓update↓delete↓join↓declare↓char↓sp_oacreate↓wscript.shell↓xp_regwrite↓‘↓;↓--"; 
            string[] jk_sql = jk1986_sql.Split(‘↓‘); 
            foreach (string jk in jk_sql) 
            { 
                // -----------------------防 Post 注入----------------------- 
                if (System.Web.HttpContext.Current.Request.Form != null) 
                { 
                    for (int k = 0; k < System.Web.HttpContext.Current.Request.Form.Count; k++) 
                    { 
                        string getsqlkey = System.Web.HttpContext.Current.Request.Form.Keys[k]; 
                        string getip; 
                        if (System.Web.HttpContext.Current.Request.Form[getsqlkey].ToLower().Contains(jk) == true) 
                        { 
                            System.Web.HttpContext.Current.Response.Write("<script Language=JavaScript>alert(‘请勿提交非法字符!‘);</" + "script>"); 
                            System.Web.HttpContext.Current.Response.Write("非法操作!系统做了如下记录 ↓" + "<br>"); 
                            if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) 
                            { 
                                getip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
                            } 
                            else 
                            { 
                                getip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 
                            } 
                            System.Web.HttpContext.Current.Response.Write("操 作 I  P :" + getip + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("操 作 时 间:" + DateTime.Now.ToString() + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("操 作 页 面:" + System.Web.HttpContext.Current.Request.ServerVariables["URL"] + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("提 交 方 式:P O S T " + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("提 交 参 数:" + jk + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("提 交 数 据:" + System.Web.HttpContext.Current.Request.Form[getsqlkey].ToLower() + "<br>"); 
                            System.Web.HttpContext.Current.Response.End(); 
                        } 
                    } 
                } 
                // -----------------------防 GET 注入----------------------- 
                if (System.Web.HttpContext.Current.Request.QueryString != null) 
                { 
                    for (int k = 0; k < System.Web.HttpContext.Current.Request.QueryString.Count; k++) 
                    { 
                        string getsqlkey = System.Web.HttpContext.Current.Request.QueryString.Keys[k]; 
                        string getip; 
                        if (System.Web.HttpContext.Current.Request.QueryString[getsqlkey].ToLower().Contains(jk) == true) 
                        { 
                            System.Web.HttpContext.Current.Response.Write("<script Language=JavaScript>alert(‘请勿提交非法字符!‘);</" + "script>"); 
                            System.Web.HttpContext.Current.Response.Write("非法操作!系统做了如下记录 ↓" + "<br>"); 
                            if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) 
                            { 
                                getip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
                            } 
                            else 
                            { 
                                getip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 
                            } 
                            System.Web.HttpContext.Current.Response.Write("操 作 I  P :" + getip + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("操 作 时 间:" + DateTime.Now.ToString() + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("操 作 页 面:" + System.Web.HttpContext.Current.Request.ServerVariables["URL"] + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("提 交 方 式:G E T " + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("提 交 参 数:" + jk + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("提 交 数 据:" + System.Web.HttpContext.Current.Request.QueryString[getsqlkey].ToLower() + "<br>"); 
                            System.Web.HttpContext.Current.Response.End(); 
                        } 
                    } 
                } 
 
                // -----------------------防 Cookies 注入----------------------- 
                if (System.Web.HttpContext.Current.Request.Cookies != null) 
                { 
                    for (int k = 0; k < System.Web.HttpContext.Current.Request.Cookies.Count; k++) 
                    { 
                        string getsqlkey = System.Web.HttpContext.Current.Request.Cookies.Keys[k]; 
                        string getip; 
                        if (System.Web.HttpContext.Current.Request.Cookies[getsqlkey].Value.ToLower().Contains(jk) == true) 
                        { 
                            System.Web.HttpContext.Current.Response.Write("<script Language=JavaScript>alert(‘请勿提交非法字符!‘);</" + "script>"); 
                            System.Web.HttpContext.Current.Response.Write("非法操作!系统做了如下记录 ↓" + "<br>"); 
                            if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) 
                            { 
                                getip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
                            } 
                            else 
                            { 
                                getip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 
                            } 
                            System.Web.HttpContext.Current.Response.Write("操 作 I  P :" + getip + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("操 作 时 间:" + DateTime.Now.ToString() + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("操 作 页 面:" + System.Web.HttpContext.Current.Request.ServerVariables["URL"] + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("提 交 方 式: Cookies " + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("提 交 参 数:" + jk + "<br>"); 
                            System.Web.HttpContext.Current.Response.Write("提 交 数 据:" + System.Web.HttpContext.Current.Request.Cookies[getsqlkey].Value.ToLower() + "<br>"); 
                            System.Web.HttpContext.Current.Response.End(); 
                        } 
                    } 
                } 
 
            } 
        }  
    }

时间: 2024-10-11 03:26:22

asp.net 网站开发常用方法的相关文章

整合Spring.net到asp.net网站开发中初探

整合Spring.net到asp.net网站开发中初探 http://www.veryhuo.com 2009-10-21 烈火网 投递稿件 我有话说 Spring提供了一个轻量级的用于构建企业级的应用程序的解决方案.Spring提供一致并清晰的配置并整合AOP(Aspect-Oriented Programming)至你的软件中.Spring.net最耀眼的功能是在中间层提供声明式事务管理用于构建全功能的ASP.NET框架. Spring.net是一个提供综合的基础结构用于支持企业级.Net开

ASP.NET网站开发中个人出错总结一:数据库连接

上图标记要保持一致.才正确. ASP.NET网站开发中个人出错总结一:数据库连接

Asp.net网站开发

就现在来说网站开发大多数还是用的asp.net,其实网站开发也并不是很难,只要学好asp.net,再一步一步的分析网站的需求,就能写出来. 网站开发是制作一些专业性强的网站,比如说动态网页.ASP.PHP.JSP网页.而且网站开发一半是原创,网站制作可以用别人的模板.网站开发字面意思比制作有更深层次的进步,它不仅仅是网站美工和内容,它可能涉及到域名注册查询.网站的一些功能的开发.对于较大的组织和企业,网站开发团队可以由数以百计的人(web开发者).规模较小的企业可能只需要一个永久的或收缩的网站管

asp.net 网站开发流程总结

由于这学期要做asp.net的网站开发,导师让我们在前期做详细的计划说明,时间安排.由于网站开发流程不知道,以及需要学什么指示都是盲懂,所以计划安排需在了解大致流程之后才能做出来,一下是询问同学和在网上查阅,总结出的粗略的网站开发流程以及一些所需要学的知识.可能存在很多漏洞和缺陷,如大家看到了也希望大家指导..... 总结一 asp.net建网站的主要步骤 1. 首先是需求分析了,分析你打算做哪些功能,涉及哪些因素以及他们的关联关系等等. 2. 数据库设计,根据功能定义出可能的数据对象,设计出数

CGI、ASP、PHP、JSP、 ASP.NET网站开发语言比较

一.主流网站开发语言的简介及优缺点. 现在主流的网站开发语言主要包括cgi.asp.php.asp.net.jsp等. HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持. (一)  网站开发语言之ASP: ASP(Active Server Pages)是微软平台下的动态网页技术.Microsoft提出的ASP概念,使设计交互式Web页面的技术有了长足的进步.它采用了三层计算结构,将Web服务器(逻辑层),客户端浏览器(表示层)以及数据库服务器(数据层)分开,具有良好的扩充性.

xheditor1.1.14在asp.net网站开发中作为可上传本地图片的在线编辑器

xheditor是一个基于jQuery开发的跨平台轻量可视化XHTML编辑器,功能强大,使用方便,CSDN网站的发表文章网页就使用了该编辑器,下面介绍在vs2013的环境下开发网页时使用该编辑器并实现本地图片上传的一种方法. 1.网上搜索并下载文件xheditor1.1.1文件包,解压后应该是一个包括jquery.xheditor_emo.t xheditor_plugins. xheditor_skin.demos等文件夹及xheditor-1.1.14-zh-cn.min.js等文件的一个文

asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)

自从腾讯微博上线以来,基本上就开始用了,一直到现在,作为一个开发人员,也看到了腾讯微博一直在不停的改变,也不知道大家有没有发现,腾讯微博提供两种加载数据的方式,一种是分页,一种是滚动浏览器滚动条加载数据,分页功能我想大家都做得太多了,今天我与大家分享一下我用滚动条滚动加载数据,小生不才,还望各位大侠指教,呵呵~ 下面开讲: 首先说一下思路,我用的是Jquery,然后通过Jquery的ajax()方法通过 HTTP 请求加载远程数据来实现的,用到Jquery,首先要应用jquery.min.js类

ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

转自:http://www.cnblogs.com/mzwhj/p/3592895.html 上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东西没有理由不支持. 附件的上传同样基于KindEditor实现,可以上传图片,flash,影音,文件等. 目录 ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一)

目前网络上大部分的网站都是由ASP或PHP开发,并且java平台的软件购买成本不适合中小企业客户,一般适用于银行、国家安全等行业领域

目前网络上大部分的网站都是由ASP或PHP开发,并且java平台的软件购买成本不适合中小企业客户,一般适用于银行.国家安全等行业领域. 要求建设开发大型复杂的网站,但仅有一个idea,不能够提供网站详细要求的客户.大型网站的建设开发的过程,是一个严谨的有详细规范的逻辑流程,必须要形成文字(文档)形式的网站建设需求,炎帝科技才能够在网站设计/网站开发的过程中控制网站建设项目质量,顺利成功完成.此类最典型的客户口头禅就是“我要做一个类似facebook的网站”,“我要做淘宝那样的网站”,此类客户自己