.net 路由实现 ashx

版权声明:全部文章版权归我所有。转载除外。 https://blog.csdn.net/kesshei/article/details/85273006
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.Routing;

namespace WeiChat
{
    public class Global : System.Web.HttpApplication
    {
        public static void RegistrRoutes(RouteCollection routes)
        {
            #region
            /*
            routes.Add(
                //路由名称
                "index",
                //传入的URL
                "index/{id}",
                //不允许用户直接访问物理URL
                //路由参数的默认值
                new RouteValueDictionary { { "id", @"\d+" } }, new UrlWrite());
             */
            #endregion
            routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));
            routes.Add(new Route("{category}/{action}", new UrlWrite()));
            //routes.Add(new Route("{category}/{action}/{*value}",new UrlWrite()));
        }

        protected void Application_Start(object sender, EventArgs e)
        {
            RegistrRoutes(RouteTable.Routes);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.Routing;
using System.IO;

namespace WeiChat
{
    public class UrlWrite:IRouteHandler
    {
        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            return new MyPage(requestContext);
        }
    }
    public class MyPage : IHttpHandler {
        public RequestContext RequestContext { get; set; }
        public MyPage(RequestContext context)
        {
            this.RequestContext = context;
        }
        //可以直接通过这个接口调用,那我直接调用index2.ashx传递过去不就可以了啦 是吧
        public virtual void ProcessRequest(HttpContext context)
        {
            index index = new global::WeiChat.index();
            index.RequestContext = RequestContext;
            index.ProcessRequest(context);
            #region 其他代码
            /*
            index1.index2  po= new index1.index2();
            po.RequestContext = RequestContext;
            po.ProcessRequest(context);
           
            /*
            //先获取POST数据,因为如果不是POST数据的话,会出现错误的
            string temp1 = app.StreamToString(context.Request.InputStream);
            app.WriteLog("UrlWrite:"+temp1);
            string abc = "";
            HttpRequest Request=context.Request;
            foreach (string key in  Request.QueryString.Keys)
            {
              abc+= Request.QueryString[key].ToString()+":";
            }
            app.WriteLog("abc:" + abc);
            RouteValueDictionary Values = RequestContext.RouteData.Values;
            string category = Values.ContainsKey("category") ? Values["category"].ToString() : "index1";
            string action = Values.ContainsKey("action") ? Values["action"].ToString() : "";
            app.WriteLog("action:" + action);
            string temp = context.Request["MS_HttpContext"];
            app.WriteLog("temp:" + temp);
            string url = string.Format("/index1/{0}.ashx?id={1}&", category, action);
            app.WriteLog("url:" + url + Request.QueryString.ToString());
            //string url1 = "/index1/index2.ashx?id=addsa&b=abcedfe";
            //context.Server.Execute(url + Request.QueryString.ToString());
            context.Response.Write("通过这个接口直接回复");
            /*
            RouteValueDictionary Values=RequestContext.RouteData.Values;
            string page = Values.ContainsKey("page") ? Values["page"].ToString() : "index";
            string id = Values.ContainsKey("id") ? Values["id"].ToString() : "";
            string url = string.Format("/{0}.ashx?id={1}", page, id);
           // context.Server.Transfer(@"~" + url, true);
           // context.Response.Redirect(url);
           // context.Server.Transfer(url,true);
           // context.Server.Transfer(url, false);
           if(context!=null&& context.Server!=null)
                context.Server.Execute("/index.ashx");
            app.WriteLog("url:" + url);
             */
            #endregion
        }
        public bool IsReusable
        {
            get { return false; }
        }
    }
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Xml;
using System.Xml.Linq;
using Newtonsoft.Json;
using System.Web.Routing;

namespace WeiChat
{
    /// <summary>
    /// index 的摘要说明
    /// </summar
    public class index :IHttpHandler
    {
        public RequestContext RequestContext { get; set; }
        public  void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
  #region 获取路由参数
            if (RequestContext == null)
            {
                context.Response.Write("不是公司用户,无法提供服务!!!");
                return;
            }
            RouteValueDictionary Values = RequestContext.RouteData.Values;
            string category = Values.ContainsKey("category") ? Values["category"].ToString() : "";
            string action = Values.ContainsKey("action") ? Values["action"].ToString() : "";
            //对账户进行判断
            if (dbaccess.getloginInfo(action).Rows.Count < 1)
            {
                context.Response.Write("不存在此帐号!!!");
                return;
            }
            #endregion
            context.Response.Write(html);
        }

        public  bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/kesshei/article/details/85273006