有HttpHander经验的进来
Agemo 2004-08-14 04:18:53 为什么ProcessRequest(HttpContext context)中context.Session始终是null呢?怎么才能取到Session对象呢?
而且path为*.do的时候,request并不会发送给这个httpHandler对象
所以改成了*do.aspx,可是session始终为null
有谁告诉我,如何在HttpHandler中访问session吗?谢谢
web.config中的配置
<system.web>
...
<httpHandlers>
<add verb="*" path="*do.aspx" type="Agemo.Handler.Controller, Agemo"/>
</httpHandlers>
...
</system.web>
实现IHttpHandler接口的类
/**
* @file Controller.cs
*
* @author Agemo
* @date 2004-08-11
*/
using System;
using System.Collections;
using System.Reflection;
using System.Web;
using System.Web.SessionState;
using Agemo.Application;
using Agemo.Entity;
namespace Agemo.Handler
{
/// <summary>
/// Controller 的摘要说明。
/// </summary>
public class Controller : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// check login
try
{
string opname = context.Request["opname"];
HttpSessionState session = context.Session;
if(session == null || session["userid"] == null)
{
if(opname != null && opname.Equals("login"))
{
string username = context.Request["username"];
if(username == null || username.Length == 0)
{
// print login page
context.Response.Write(LoginPage);
return;
}
}
else
{
// print requirelogin page
context.Response.Write(RequireLoginPage);
return;
}
}
else if(opname != null && opname.Equals("logout"))
{
context.Session.Clear();
context.Response.Redirect(loginPage);
return;
}
// check login end
Hashtable htCtrl = new Operation().GetCtrlInfo(opname);
if(htCtrl == null)
{
context.Response.Write(IllegalPage);
return;
}
if(session != null)
{
object authbit = session["authbit"];
if( authbit != null &&
(((long)authbit) & ((long)htCtrl["authbit"])) == 0)
{
context.Response.Write(NoPrivilegePage);
return;
}
}
IApplication theApp =
(IApplication)Activator.CreateInstance(
Type.GetType((string)htCtrl["classname"]));
theApp.Init((string)htCtrl["outpage"], (string)htCtrl["errpage"]);
theApp.SetSession(session);
theApp.DoProcess(context.Request.Params);
context.Response.Write(theApp.GenerateOutpage());
}
catch(Exception e)
{
context.Response.Write(e.StackTrace);
context.Response.Write(e.Message);
//context.Response.Write(e.StackTrace);
}
}
public bool IsReusable
{
get
{
return false;
}
}
private string IllegalPage
{
get
{
return null;
}
}
private string RequireLoginPage
{
get
{
return null;
}
}
private string NoPrivilegePage
{
get
{
return null;
}
}
private string LoginPage
{
get
{
IApplication app = (IApplication)new LoginDealer();
app.Init(loginPage, null);
app.DoProcess(null);
return app.GenerateOutpage();
}
}
private static readonly string loginPage = "login.html";
}
}