0

是否可以将即将到来的 url 更改为localhost/test?t=gowthamlocalhost/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);
  }
}

我在正确的道路上,但我无法实现吗?或者还有其他方法吗?

4

1 回答 1

1

每当我做这样的事情时,它就一直在使用HttpContext.RewritePath(). 快速的'n脏方法是把它放在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 中。

注意:对不起,代码不完整,不在开发机器上,不能记住所有 Request.Url 部分。Intellisense 应该会有所帮助:)

于 2013-07-19T08:16:27.833 回答