2014-01-31 68 views
0

所以我試圖創建一個允許我們隨機測試應用程序的一部分的兩個版本的情況。 我已經創建了一個IHttpHandler(C#,asp.net webforms 4,網站項目)的實現,當我們的「商店」發出請求時,我會評估他們是否應該看到商店或shopB。IHttpHandler實現

這裏的處理程序的實現:

public class ShopRequestHandler : IHttpHandler, IReadOnlySessionState 
    { 
     public ShopRequestHandler() { } 

     public void ProcessRequest(HttpContext context) 
     { 
      var originalRequest = context.Request.RawUrl; 
      var process = originalRequest.Contains("shop"); 
      if (process) 
      { 
       if (UsingShopB(context)) 
       { 
        var newRequest = originalRequest.Replace("shop", "shopB"); 
        context.Response.Redirect(newRequest, false); 
       } 
       else 
       { 
        context.Response.Redirect(originalRequest, false); 
       } 
      } 

     } 
     public bool IsReusable 
     { 
      get { return false; } 
     } 

     private bool UsingShopB(HttpContext context) 
     { 
      HttpCookie cookie = context.Request.Cookies["UseShopB"]; 
      if (cookie == null) 
      { 
       var rand = new Random(); 
       var val = rand.Next(1, 10); 
       context.Response.AppendCookie(val%2 == 0 
        ? new HttpCookie("UseShopB", true.ToString()) 
        : new HttpCookie("UseShopB", false.ToString())); 
      } 
      var httpCookie = context.Response.Cookies["UseShopB"]; 
      return httpCookie != null && Boolean.Parse(httpCookie.Value); 
     } 
    } 

的問題是不是重定向到店B,即偉大工程。這真的只是當我想要正規版的商店。我得到了一個瘋狂的請求循環,並且出現一個錯誤,表示無法顯示該頁面。在我看來,當商店被要求時,我並沒有做任何不同的事情。這是shopB被要求修改發生的時間。難住了。我應該不使用RawUrl嗎?我錯過了什麼?這是一個生產問題,所以任何幫助都會很大。並且只是爲了重新迭代,當隨機選擇是shopB時,它可以很好地工作。哎呀。

我只是想補充一點,當我修改路徑一切正常時,我需要幫助的是如何在不需要修改任何內容時單獨保留原始請求。幫幫我!

謝謝-Sean

+0

忘了提及我們基本上將商店複製到名爲shopB的目錄中。我有配置中正確的處理程序部分的過濾器,即路徑。我們想在視覺上修改shopB並獲得我們客戶的反饋。謝謝。 – Sean

回答

1

的問題是你放置店檢查:

VAR過程= originalRequest.Contains( 「商店」)

這將對於「Shop」和「ShopB」都是如此,所以在Shop的情況下它將返回「ShopB」,但在ShopB的情況下它將返回「ShopBB」

您需要更精緻的車ck這個過濾器。或者反轉支票或使用與字數完全匹配。

+0

問題是我想知道它是商店還是shopB,因爲如果路徑包含我想要處理它的字店的任何變體。但是,謝謝。 :-) – Sean

相關問題