0

今後の 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);
  }
}

私は正しい道を進んでいますが、それを達成できませんでしたか? それとも他に方法はありますか?

4

1 に答える 1

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 に貼り付けることができます。

注意: 不完全なコードで申し訳ありません。開発マシンではなく、すべての Request.Url パーツを覚えていません。ただし、インテリセンスは役立つはずです:)

于 2013-07-19T08:16:27.833 に答える