Добавить виртуальный путь к входящему URL C#

Можно ли изменить следующий URL-адрес так, чтобы 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 ответ

Всякий раз, когда я сделал что-то подобное, он использовал HttpContext.RewritePath(), Быстрый и грязный метод - поместить его в globabl.asax по запросу beging. Ты можешь использовать 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.

NB: Извините за неполный код, но не на компьютере разработчика и не могу вспомнить все части Request.Url. Intellisense должен помочь, хотя:)

Другие вопросы по тегам