asp.net url重写 用Global.asax
Global.asax写些方法可以实现地址url的重写,怎么实现的,为什么我总是不成功,能不能给一个最简单的例子,加入一个解决方案里就一个index.aspx如何重写它,...
Global.asax 写些方法可以实现地址url的重写,怎么实现的,为什么我总是不成功,能不能给一个最简单的例子,加入一个解决方案里就一个index.aspx如何重写它,什么规则呢?谢谢了!
展开
2个回答
展开全部
其实你的意思就跟实现mvc的路由实现的方式:
原理就是在加载application的时候实现路由转换
就像mvc模式实现的原理一样的:
就是定义一个httpHandler来实现
给你发一段代码:
public class HttpServiceHandler : IHttpHandler
{
private ServerInfo serverInf;
private string serverName = string.Empty;
private string methodName = string.Empty;
public ServerInfo ServerInformation
{
get
{
return serverInf;
}
set
{
serverInf = value;
}
}
#region IHttpHandler 成员
public bool IsReusable
{
get { throw new NotImplementedException(); }
}
public void ProcessRequest(HttpContext context)
{
try
{
if (ServerInformation != null)
{
serverName = ServerInformation.ParseNamePair.ServiceName.ToString();
methodName = ServerInformation.ParseNamePair.MethodName.ToString();
//string path = context.Server.MapPath();
Assembly ass = Assembly.Load("FrameWorkTest");
string assname = ass.FullName.ToString();
Type type = ass.GetType("FrameWorkTest." + serverName);
MethodInfo method = type.GetMethod(methodName);
object obj = Activator.CreateInstance(type);
string returnValue = (string)method.Invoke(obj, null);
context.Response.Write("<body>");
context.Response.Write("<div>");
context.Response.Write(returnValue);
context.Response.Write("</div>");
context.Response.Write("</body>");
}
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
}
/// <summary>
/// Url路由转换器的Module
/// </summary>
public class UrlRoutingModule : IHttpModule
{
#region IHttpModule 成员
public void Dispose()
{
throw new NotImplementedException();
}
public void Init(HttpApplication context)
{
//没有起到转向HttpHandler
//context.PostMapRequestHandler += new EventHandler(context_PostMapRequestHandler);
context.ResolveRequestCache += new EventHandler(context_PostMapRequestHandler);
}
void context_PostMapRequestHandler(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
//解析出来了路径
NamePair namePair = FrameWorkRule.ParseNamePair(app.Request);
if (namePair != null)
{
HttpServiceHandler handler = new HttpServiceHandler();
handler.ServerInformation = new ServerInfo(namePair);
app.Context.RemapHandler(handler);
}
//else
//{
// throw new ArgumentOutOfRangeException("运用的HttpHandler不正确!");
//}
}
#endregion
}
这个就是原理,就是用写一个httpHander 来重新定义实现跳转,
这是大牛会飞的鱼的一篇博客你可以参考:http://www.cnblogs.com/fish-li/archive/2012/02/12/2348395.html
Good Luck! 希望能够帮助到你!
如果可以,请采纳!谢谢!
Storm代理
2023-08-29 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询