是否可以将 localhost / test?t = gowtham 更改为 localhost / test / t / gowtham ?
根据我的理解,我想通过扩展
来做到这一点public class Myhandlers : IHttpHandlerFactory
{
public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
{
string s= application.Request.QueryString["t"];
PageParser.GetCompiledPageInstance(url,"/t/"+s, context);
}
}
我是走在正确的道路上但我无法实现它吗?或者还有其他方式吗?
答案 0 :(得分:1)
每当我做完这样的事情时,就一直在使用HttpContext.RewritePath()
。快速'肮脏的方法是在beged请求下将它放在globabl.asax中。
您可以使用Request.Url
获取所请求URL的一部分,根据需要进行修改,然后调用RewritePath。像这样:
void Application_BeginRequest(object sender, EventArgs e)
{
string Authority = Request.Url.GetLeftPart(UriPartial.Authority); // gets the protocol + domain
string AbsolutePath = Request.Url.AbsolutePath; // gets the requested path
string InsertedPath = string.Empty; // if QS info exists, we'll add this to the URL
// if 't' exists as a QS key get its value and contruct new path to insert
if (Request.QueryString["t"] != null && !string.IsNullOrEmpty(Request.QueryString["t"].ToString()))
InsertedPath = "/t/" + Request.QueryString["t"].ToString();
string NewUrl = Authority + InsertedPath + AbsolutePath;
HttpContext.Current.RewritePath(NewUrl);
}
如果您对它按预期工作感到满意,可以将其粘贴在HttpModule中。
注意:抱歉代码不完整,不在dev机器上,不能忘记所有的Request.Url部分。 Intellisense应该有所帮助:)