• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    C#中实现伪静态页面两种方式介绍
    第一种是在页面global.asax中,相关代码如下
    复制代码 代码如下:

    void Application_BeginRequest(object sender, EventArgs e)
    {
    HttpContext context = ((HttpApplication)sender).Context;
    string oldurl = context.Request.Path.ToLower();
    if ( ( oldurl.IndexOf("-") > 0 oldurl.IndexOf(".") == -1) || (oldurl.IndexOf("-") > 0 oldurl.IndexOf("aspx") > 0) )
    {
    string[] url = oldurl.Substring(oldurl.LastIndexOf("/") + 1).Replace(".aspx", "").Split('-');
    string path = oldurl.Substring(0, oldurl.LastIndexOf("/") + 1);
    //file
    string file = url[0];
    file = file.Replace("about", "detail");
    file = file.Replace("news", "list");
    file = file.Replace("down", "detail");
    file = file.Replace("case", "album");
    file = file.Replace("contact", "detail");
    //query
    string query = "";
    for ( int i=1;iurl.Length;i++ )
    {
    if (url[i] != "")
    {
    switch (i)
    {
    case 1:
    query += "id=" + url[i];
    break;
    case 2:
    query += "page=" + url[i];
    break;
    case 3:
    query += "key=" + url[i];
    break;
    case 4:
    query += "v1=" + url[i];
    break;
    case 5:
    query += "v2=" + url[i];
    break;
    case 6:
    query += "v3=" + url[i];
    break;
    case 7:
    query += "v4=" + url[i];
    break;
    case 8:
    query += "v5=" + url[i];
    break;
    case 9:
    query += "v6=" + url[i];
    break;
    case 10:
    query += "v7=" + url[i];
    break;
    }
    }
    }
    //newurl
    string newurl = path + file + ".aspx?" + query;
    if( context.Request.ServerVariables["QUERY_STRING"] != null context.Request.ServerVariables["QUERY_STRING"] != "" )
    newurl += "" + context.Request.ServerVariables["QUERY_STRING"];
    //Response.Write(newurl);
    context.RewritePath(newurl);
    }

    第二种方法是在HttpModule.cs中,代码如下
    复制代码 代码如下:

    public class HttpModule : IHttpModule
    {
    private const RegexOptions regexOptions = RegexOptions.IgnoreCase | RegexOptions.Compiled;
    private static readonly Regex regexFileName = new Regex(@".*?/([^./]*)\.aspx(.*)", regexOptions);
    private static readonly Regex regexRewritePath = new Regex(@"^.*?/(\w*)(-?(\w+)-([\w,\|,%]+))+\.aspx", regexOptions);
    public void Dispose()
    {
    }
    public void Init(HttpApplication httpApplication)
    {
    httpApplication.BeginRequest += ReUrl_BeginRequest;
    }
    private static void ReUrl_BeginRequest(object sender, EventArgs e)
    {
    Globals.Catch(
    () =>
    {
    var context = ((HttpApplication)sender).Context;
    var request = context.Request;
    var url = request.Url;
    if (!VerifyUrl(url))
    {
    string input = url.PathAndQuery.ToLower();
    //Loger.Debug("PathAndQuery-->" + input);
    //Loger.Debug("AbsolutePath-->" + url.AbsolutePath);
    //Loger.Debug("AbsoluteUri-->" + url.AbsoluteUri);
    //Loger.Debug("DnsSafeHost-->" + url.DnsSafeHost);
    //Loger.Debug("LocalPath-->" + url.LocalPath);
    //Loger.Debug("AppDomain.CurrentDomain.BaseDirectory-->" + AppDomain.CurrentDomain.BaseDirectory);
    //Loger.Debug("Globals.GlobalsVirtualFilePath-->" + Globals.GlobalsVirtualFilePath);
    if (input.StartsWith(Globals.GlobalsVirtualFilePath))
    input = input.Remove(0, Globals.GlobalsVirtualFilePath.Length);
    string viewmode = Globals.ViewMode;
    var themeName = request.QueryString["theme"] ?? "";
    if (string.IsNullOrEmpty(themeName))
    {
    themeName = Globals.ThemeName;
    }
    if (input == "/")
    input = "/index.aspx";
    if (viewmode == "Rewrite")
    {
    Loger.Debug("now input-->" + input);
    Match match = regexRewritePath.Match(input);
    if (match.Success match.Groups.Count == 5)
    {
    var captures3 = match.Groups[3].Captures;
    var captures4 = match.Groups[4].Captures;
    var itemCount = match.Groups[3].Captures.Count;
    var list = new Liststring>();
    for (var i = 0; i itemCount; i++)
    {
    list.Add(string.Concat(captures3[i].Value, "=", captures4[i].Value));
    }
    context.RewritePath(Globals.AspxFileUrl(themeName, match.Groups[1].Value + ".aspx?" + string.Join("", list.ToArray())));
    return;
    }
    }
    var fileName = regexFileName.Match(request.Path.ToLower()).Groups[1].ToString();
    if (string.IsNullOrEmpty(fileName))
    return;
    new ConvertTheme(context)
    {
    ThemeName = themeName,
    ViewMode = viewmode
    }.Display(fileName);
    }
    });
    }
    private static bool VerifyUrl(Uri uri)
    {
    var url = uri.AbsolutePath.ToLower();
    if (url.StartsWith(Globals.GlobalsVirtualFilePath))
    url = url.Remove(0, Globals.GlobalsVirtualFilePath.Length);
    return uri.IsFile
    || url.IndexOf("site") != -1
    || url.IndexOf("sys") != -1
    || url.IndexOf("html") != -1
    || url.IndexOf("user") != -1
    || url.IndexOf("bbs") != -1
    || url.IndexOf("_module.aspx") != -1
    || url.IndexOf("webresource.axd") != -1
    || url.IndexOf("scriptresource.axd") != -1;
    }
    }
    您可能感兴趣的文章:
    • C#实现动态生成静态页面的类详解
    • C#用委托BeginInvoke做异步线程
    • mongodb使用c#驱动数据插入demo
    • C# Winform实现石头剪刀布游戏
    • c#操作mongodb插入数据效率
    • C#引用类型和值类型的适用场合和区别
    • C#自动类型转换与强制类型转换的讲解
    • 解析在C#中接口和类的异同
    • C#实现图片切割、切图、裁剪
    • C#网站生成静态页面的实例讲解
    上一篇:子窗口给父窗口赋值实现思路及案例演示
    下一篇:asp.net防止刷新时重复提交(可禁用工具条刷新按钮)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    C#中实现伪静态页面两种方式介绍 中,实现,伪,静态,页面,两种,