2011-07-20 54 views
1

我編寫該HTTP模塊和正確添加到它的網站,但它給我這個錯誤,當我運行它:問題在C#.NET Web應用程序重定向

**頁面沒有正確重定向

Firefox已經檢測到服務器重定向此地址的 請求的方式,將永遠不會完成**

using System; 
    using System.Web; 
    using System.Net; 
    using System.Text; 
    using System.IO; 

    namespace CommonRewriter 
    { 
     public class ParseUrl : IHttpModule 
     { 
      public ParseUrl() 
      { 

      } 

      public String ModuleName 
      { 
       get { return "CommonRewriter"; } 
      } 

      public void Init(HttpApplication application) 
      { 
       application.BeginRequest += new EventHandler(application_BeginRequest); 
       application.EndRequest += new EventHandler(application_EndRequest); 
      } 


      private string ParseAndReapply(string textToParse) 
      { 
       string final = null; 

       if (textToParse.Contains(".") && textToParse.Contains("example.com")) 
       { 
        string[] splitter = textToParse.Split('.'); 
        if (splitter[0].ToLower() != "www" &&(splitter[2].ToLower()).Contains("blog")) 
        { 
         final = ("www.example.com/Blog/?tag=/" + splitter[0]); 
        } 
        else { final = textToParse; } 
       } 
       else { final = textToParse; } 

       return final; 
      } 

      void application_BeginRequest(object sender, EventArgs e) 
      { 
       HttpApplication application = (HttpApplication)sender; 
       HttpContext context = application.Context; 

       string req = context.Request.FilePath; 
       context.Response.Redirect(ParseAndReapply(req)); 
       context.Response.End(); 
      } 


      void application_EndRequest(object sender, EventArgs e) 
      { 

      } 

      public void Dispose() { } 

     } 
    } 

回答

0

我認爲這個問題是:

context.Response.Redirect(ParseAndReapply(req)); 

BeginRequest事件表示創建任何給定的新請求。所以在每個重定向中,它都會被調用。在你的代碼中,它被重定向到一個導致無限循環的新請求。試着重新考慮你的邏輯。

1

每個開始請求都會重定向,即使是相同的網址。在致電context.Response.Redirect()之前,您需要進行檢查以確保重定向是必需的。

0

application_BeginRequest要重定向通過context.Response.Redirect(ParseAndReapply(req));

申請您應該檢查是否重定向前一個條件爲真,如

string req = context.Request.FilePath; 
if (req.Contains(".") && req.Contains("example.com")) 
{ 
    context.Response.Redirect(ParseAndReapply(req)) 
    context.Response.End(); 
} 
0

如果ParseAndReply的參數不包含「example.com」,它將無限地重定向到它本身。

一個其他說明:

if (textToParse.Contains(".") && textToParse.Contains("example.com")) 

是多餘的。 「example.com」將始終包含「。」

+0

感謝您指出。原來它只是'textToParse.Contains(「。」)'我稍後添加了「example.com」部分 – user796762

+0

我正在使用的站點是一個具有ip地址而不是域名的開發站點。即時通訊使用主機文件將IP更改爲可用域。 string req = context.Request.FilePath;'是否可以返回一個用於評估的IP地址而不是文本域名。 – user796762

+0

主機名應該不重要。 Filepath返回URL的文件和路徑部分,不包含主機名或任何查詢字符串值。您的重定向條件觸發的唯一方法是如果您有像「http://somesite.com/example.com/file.aspx?arg=val1&arg2=val2」這樣的URL「 」FilePath將返回「/example.com/file .aspx「。 –

相關問題