2014-01-31 29 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

相关问题