2013-07-19 2 views
0

Можно ли изменить наступающий URL так, как локальный/тест? Т = Gowtham к локальный/тест/т/Gowtham?Append виртуальный путь к URL-адресу входящего в C#

основано на моем понимании я думал, что делать это за счет расширения

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

Что вы действительно пытаетесь делать (или учиться)? Там, вероятно, более стандартные способы сделать это. –

+0

просто переписать весь входящий url .. в том смысле, что если приложение имеет URL-адрес как localhost/test, localhost/test/ss.aspx необходимо переписать на localhost/test/t/gowtham и localhost/test/t/gowtham/ss. aspx – GowthamanSS

+0

Рассмотрите возможность использования существующих инструментов, таких как [IIS url rewrite] (http://www.iis.net/downloads/microsoft/url-rewrite). –

ответ

1

Всякий раз, когда я делал такие вещи, использовал HttpContext.RewritePath(). Быстрый «грязный» метод заключается в том, чтобы поместить его в 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.

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

+0

Спасибо за ваш ответ? но это не помогает мне – GowthamanSS

+0

А, я перечитываю ваш вопрос и думаю, что я неправильно понял. Вы сказали localhost/test? T = gowtham для localhost/test/t/gowtham. Вы хотите взять параметры querystring (t и gowtham) и изменить путь, чтобы добавить их как папки в URL? Или вы говорите, что все входящие запросы должны иметь/t/gowtham/добавлены к ним? – Jag

+0

s сначала значение берется из параметров запроса initial и rest all входящий url должен иметь t/{параметры запроса формы формы} gowtham в нашем случае – GowthamanSS