使用ISAPI_Rewrite重写URL后取页面的访问地址

在IIS里面装了ISAPI_Rewrite后,重写URL后在程序里面用Request.RawUrl和Requst.Url取得的地址都是没有经过重写的URL,想要取得重写过的URL必须这么做:在重写的RewriteRule后面[]里面的参数必须带上U,Request.ServerVeriables["HTTP_X_REWRITE_URL"],即可取得页面的重写过的URL。

另附上在php中的取法:

IIS中

$_SERVER['HTTP_X_REWRITE_URL']

Apache使用:

$_SERVER['REDIRECT_QUERY_STRING']或$_SERVER['REDIRECT_URL']

Response.Status和Response.StatusDescription的区别

看VS里面的提示,怎么都看不出来这两个有什么区别,反正都是字符串。
其实它们之间的区别就是Status的值里面比StatusDescription多一个状态码,如下:

Response.Status = "304 Not Modified";
Response.StatusDescription = "Not Modified";

正则表达式之获取匹配、非获取匹配、正向预查、负向预查

看一下下面这个表格,就应该很清楚了,绿色代表匹配结果。

说明 正则表达式 匹配结果 $1
普通表达式 windows 98|2000|2003 windows 98 windows 2000 windows 2003
后向引用,获取匹配 windows (98|2000|2003) windows 98windows 2000windows 2003 98,2000,2003
非获取匹配 windows (?:98|2000|2003) windows 98windows 2000windows 2003 获取不到$1
正向预查,非获取匹配 windows (?=98|2000) windows 98 windows 2000 windows 2003
负向预查,非获取匹配 windows (?!98|2000) windows 98 windows 2000 windows 2003

.NET源码加密保护详解|.NET程序加密(转载)

一. 前言

大家好,我是康杰,大家可以叫我Jason

我和大家一样,都是搞技术出身,也未当过讲师,所以口材有限,如果讲得不好之处,还希望大家多多海含,谢谢。

今天是我们第一次见面,能认识你们,真的很高兴。

下面我们不要耽误大家的宝贵时间,让我们马上开始上课吧。

DotNet ms开发并推广的企业解决方案,也是Ms以后几年的核心发展战略之一,所以我觉得 DotNet 是有前途的,他有一个优秀的概念,还有一个强大的财团,想失败都很难啊。DotNet 缺乏的是大型企业高层管理人员对它的信心,这还需要时间和事例去证明,世界上待开发的大案件还很多,Java DotNet 最终谁的市场比例多,现在还说不清楚。

二. 简介DOTNET 编译原理

相信大家都使用过 Dotnet ,可能还有不少高手。不过我还要讲讲Dotnet的基础知识,Dotnet的编译原理。

(全文 ...)

IIS6下运行MVC项目,请求链接带扩展名.aspx

想用MVC做个网站玩玩,MVC默认项目的链接形式是不带扩展名的,但服务器的环境是.net2.0和iis6,想用没有扩展名的请求路径形式,需要加通配符映射,这样就会把网站的所有文件都交给了asp.net处理,有点浪费资源,想想还是放弃了,还是加上.aspx的扩展名,服务器上再用isapi_rewrite重写算了,完全可以实现相同的效果。当我把global.asxa.cs里面的routes.MapRoute改为如下时

routes.MapRoute(
	"Default", // Route name
	"{controller}.aspx/{action}/{id}", // URL with parameters
	new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);

访问首页是总是出现“传入的请求不与任何路由匹配。”的错误,访问首页时Request.Path="/",Request.Path与{controller}.aspx/{action}/{id}确实不匹配,但是为什么我没有加.aspx的时候Request.Path就可以匹配{controller}/{action}/{id}它呢?{}里面的东西没有传值的话可以忽略,但还有两个/,怎么就能匹配了?有时间去看看内部的实现代码,现在也不想管那么多了。加了一个MapRoute解决问题。

routes.MapRoute(
	"DefaultPage", // Route name
	"", // 新加一个链接匹配字符串,为空就行了
	new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);

routes.MapRoute(
	"Default", // Route name
	"{controller}.aspx/{action}/{id}", // URL with parameters
	new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);

让Window程序只能运行一个实例

如何让window运用程序只有一个实例,重复运行即会显示以前打开的实例。

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Reflection;   

namespace Junstyle
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            if( Exist() )
            {
                Application.Exit();
                return;
            }   

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault( false );
            Application.Run( new frmMain() );
        }   

        [DllImport( "User32.dll" )]
        private static extern bool ShowWindowAsync( System.IntPtr hWnd, int cmdShow );
        [DllImport( "User32.dll" )]
        private static extern bool SetForegroundWindow( System.IntPtr hWnd );   

        public static bool Exist()
        {
            bool ret = false;
            Process current = Process.GetCurrentProcess();
            Process[] processes = Process.GetProcessesByName( current.ProcessName );
            //遍历与当前进程名称相同的进程列表
            foreach( Process process in processes )
            {
                //Ignore the current process
                if( process.Id != current.Id )
                {   

                    if( Assembly.GetExecutingAssembly().Location.Replace( "/", "\\" ) == current.MainModule.FileName )
                    {
                        ShowWindowAsync( process.MainWindowHandle, 1 ); //调用api函数,正常显示窗口
                        SetForegroundWindow( process.MainWindowHandle ); //将窗口放置最前端。
                        return true;
                    }
                }
            }
            return ret;
        }
    }
}

C#控制台程序:用*显示密码输入

用ConsoleKeyInfo记录按键信息

C#代码
  1. static void Main(string[] args)   
  2. {   
  3.     List<ConsoleKeyInfo> ls = new List<ConsoleKeyInfo>();   
  4.     ConsoleKeyInfo cki = Console.ReadKey(true);   
  5.     while (cki.Key.ToString() != "Enter")   
  6.     {   
  7.     ls.Add(cki);   
  8.     Console.Write("*");   
  9.     cki = Console.ReadKey(true);   
  10.     }   
  11.   
  12.     Console.WriteLine();   
  13.   
  14.     foreach (ConsoleKeyInfo o in ls)   
  15.     {   
  16.     Console.Write(o.KeyChar);   
  17.     }   
  18.     Console.ReadLine();   
  19. }  

 

asp.net页面详细执行流程

asp.net页面从请求到呈现给用户的过程

1. BeginRequest
2. AuthenticateRequest
3. PostAuthenticateRequest
4. AuthorizeRequest
5. PostAuthorizeRequest
6. ResolveRequestCache
7. PostResolveRequestCache
8. PostMapRequestHandler
9. AcquireRequestState
10. PostAcquireRequestState
11. PreRequestHandlerExecute
12. At this stage, the selected handler executes the current request. The most familiar handler is the Page handler.
13. PostRequestHandlerExecute
14. ReleaseRequestState
15. PostReleaseRequestState
16. UpdateRequestCache
17. PostUpdateRequestCache
18. EndRequest

其中第12步,具体的页面执行流程,分为如下步骤:

Page.OnPreInit
MasterPageControl.OnInit (for each control on the master page)
Control.OnInit (for each contol on the page)
MasterPage.OnInit
Page.OnInit
Page.OnInitComplete
Page.OnPreLoad
Page.OnLoad
MasterPage.OnLoad
MasterPageControl.OnLoad (for each control on the master page)
Control.OnLoad (for each contol on the page)
Page.OnXXX (control event)
MasterPage.OnBubbleEvent
Page.OnBubbleEvent
Page.OnLoadComplete
Page.OnPreRender
MasterPage.OnPreRender
MasterPageControl.OnPreRender (for each control on the master page)
Control.OnPreRender (for each contol on the page)
Page.OnPreRenderComplete
MasterPageControl.SaveControlState (for each control on the master page)
Control.SaveControlState (for each contol on the page)
Page.SaveViewState
Page.SavePageStateToPersistenceMedium
Page.OnSaveStateComplete
MasterPageControl.OnUnload (for each control on the master page)
Control.OnUnload (for each contol on the page)
MasterPage.OnUnload
Page.OnUnload

C# 用VB.net 函数库来实现全角与半角转换、简体和繁体转换

        /// 转全角的函数(SBC case)
        ///
        /// 任意字符串
        /// 全角字符串
        ///
        ///全角空格为12288,半角空格为32
        ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
        ///       
        public string ToSBC(string input)
        {
            //半角转全角:
            char[] c=input.ToCharArray();
            for (int i = 0; i < c.Length; i++)
            {
                if (c[i]==32)
                {
                    c[i]=(char)12288;
                    continue;
                }
                if (c[i]<127)
                    c[i]=(char)(c[i]+65248);
            }
            return new string(c);               
        }

        /**////
        /// 转半角的函数(DBC case)
        ///
        /// 任意字符串
        /// 半角字符串
        ///
        ///全角空格为12288,半角空格为32
        ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
        ///
        public string ToDBC(string input)
        {   
            char[] c=input.ToCharArray();
            for (int i = 0; i < c.Length; i++)
            {
                if (c[i]==12288)
                {
                   c[i]= (char)32;
                    continue;
                }
                if (c[i]>65280 && c[i]<65375)
                    c[i]=(char)(c[i]-65248);
            }   
            return new string(c);
        }
2.C#中直接调用VB.NET的函数,兼论半角与全角、简繁体中文互相转化

在C#项目中添加引用Microsoft.VisualBasic.dll, 可以在C#程序中直接使用VB.NET中丰富的函数 
 

 // 命令行编译 : csc /r:Microsoft.VisualBasic.dll Test.cs
 // 如果是用 Visual Studio .NET IDE, 请按以下方法为项目添加引用:
 // 打开[解决方案资源管理器], 右击项目名称, 选择[添加引用],
 // 从列表中选择 Microsoft Visual Basic .NET Runtime 组件.

 using Microsoft.VisualBasic;

class Test
{
  static void Main()
  {
    string s = "空军]";
    System.Console.WriteLine(s);
    s = Strings.StrConv(s, VbStrConv.Wide              , 0); // 半角转全角
    s = Strings.StrConv(s, VbStrConv.TraditionalChinese, 0); // 简体转繁体
    System.Console.WriteLine(s);
    s = Strings.StrConv(s, VbStrConv.ProperCase        , 0); // 首字母大写
    s = Strings.StrConv(s, VbStrConv.Narrow            , 0); // 全角转半角
    s = Strings.StrConv(s, VbStrConv.SimplifiedChinese , 0); // 繁体转简体
    System.Console.WriteLine(s);
  }
}

C# String.Format格式的详细说明,供参考

几种变量格式化的参数说明:

C#格式化数值结果表

字符

说明

示例

输出

C 货币 string.Format("{0:C3}", 2) $2.000
D 十进制 string.Format("{0:D3}", 2) 002
E 科学计数法 1.20E+001 1.20E+001
G 常规 string.Format("{0:G}", 2) 2
N 用分号隔开的数字 string.Format("{0:N}", 250000) 250,000.00
X 十六进制 string.Format("{0:X000}", 12) C


string.Format("{0:000.000}", 12.2) 012.200

(全文 ...)