将虚拟路径附加到传入的URL c#

时间:2013-07-19 06:32:57

标签: c# .net url-rewriting ihttphandler

是否可以将 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);
  }
}

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

1 个答案:

答案 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应该有所帮助:)