Добавить виртуальный путь к входящему 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 должен помочь, хотя:)