牛腩新闻发布系统中问题集锦

      最近一直在看牛腩老师的新闻发布系统.到现在感觉最大的就是非常地想总结。一是B/S中涉及到的html,css,asp.net,javascript,jquery,ajax等等,他们究竟是什么,我只是能通过这个系统有一个模糊的想法,他们之间的关系是怎么样的,还理不清。现在跟着做了一遍,但是很多该了解的东西还没有掌握。这是我接下来该做得事情---建立B/S的全局观。二是在做得过程中由于工具和语言的发展,很多的地方已经不一样了。边做边调bug。下面我总结了一下我做得过程中出现的bug,以及解决办法。

1.获取客户端IPv4地址

在视频牛腩老师采用这种方法取出客户端ip:Request.ServerVariables["REMOTE_ADDR"];在我这里测试出的结果是"::1".而不是想象的类似于"127.0.0.1"这样的格式的IP地址.这是因为我使用的window8的系统,默认取出的是IPv6的地址。我们可以将网络连接中 IPv6的协议勾掉(这点在网上找到的办法,没有测试过)。我采用的是另一种办法,将ipv6的地址转为ipv4的。这里还需要注意一点:代理服务器.

 ASP 中使用 Request.ServerVariables("REMOTE_ADDR") 来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取。但是也不是每个代理服务器都能用此方法获得.如果客户端没有通过代理服务器来访问,那么用 Request.ServerVariables ("HTTP_X_FORWARDED_FOR") 取到的值将是空的.可以这么处理:

...... 
userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") 
If userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR") 
...... 

我的解决办法(取出真正的IPv4地址):需要引用命名空间:System.Net

        public string GetClientIPv4()                    '获取客户端Ipv4地址。
        {
            string ipv4 = String.Empty;
            foreach (IPAddress ip in Dns.GetHostAddresses(GetClientIP()))    '调用下面的方法获取IP。
            {
                if (ip.AddressFamily.ToString() == "InterNetwork")
                {
                    ipv4 = ip.ToString();
                    break;
                }
            }

            if (ipv4 != String.Empty)
            {
                return ipv4;
            }

            foreach (IPAddress ip in Dns.GetHostEntry(GetClientIP()).AddressList)
            {
                if (ip.AddressFamily.ToString() == "InterNetwork")
                {
                    ipv4 = ip.ToString();
                    break;
                }
            }
            return ipv4;
        }


        /// <summary>
        /// 取得客户端地址
        /// </summary>
        public string GetClientIP()
        {
            if (null == HttpContext.Current.Request.ServerVariables["HTTP_VIA"])   '使用代理服务器了吗?
            {
                return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];   '是,采用REMOTE_ADDR这种方法。
            }
            else
            {
                return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];   '不是,采用HTTP_X-FORWARDED_FOR这种方法。

            }
        }

2.将密码转换为MD5码

牛腩老师的视频中需要将密码加密为MD5码,他的方法为:

string Password = FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox1.Text.ToString(), "MD5");
我的vs2012中出现此方法已过时的错误提示。下面是我的解决方案:需要引用命名空间: System.Web.Security;

       //将字符加密为MD5码
        public String md5(String s)
        {
            System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s);
            bytes = md5.ComputeHash(bytes);
            md5.Clear();

            string ret = "";
            for (int i = 0; i < bytes.Length; i++)
            {
                ret += Convert.ToString(bytes[i], 16).PadLeft(2, '0');
            }
            return ret.PadLeft(32, '0');
        }

3.引用第三方控件FreeTextBox

在视频中引用了第三方控件FreeTextBox后,编译出现错误:错误"Lc.exe 已退出,代码 -1 ".

解决方案:

 1、就是把Properties文件下的license.licx给删除,重新编译。

 2、如果还出现这个问题的话,必须将你的破解版的哪个组件使用lidism给翻译成il语言,然后用ilasm重新编译成dll,在编译的时候加入 /key=[你的强名称文件].snk 参数,自己加入强名称签名,然后使用vs2005重新编译,就可以成功了。

4.添加asp.net 的验证控件时弹出的错误。如下:

([ASP.NET]WebForms UnobtrusiveValidationMode 需要 'jquery' 的ScriptResourceMapping。请加入 ScriptResourceMapping 命名的 jquery (区分大小写)。)

解决办法:在page_load事件中加入下面这句话:UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;   就可以了。(原因还不了解。)



你可能感兴趣的:(牛腩新闻发布系统中问题集锦)