2014-08-30 21 views
1

当我使用HttpWebRequest从我的博客获取内容时,存在一个大问题。C# - 连接:保持活动在HttpWebRequest重定向期间不发送标题

首先,让我们来看看代码

请求是通过一个C#控制台应用程序进行:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/MyBlog2014/Security/Login"); 
     request.ProtocolVersion = HttpVersion.Version10; 
     var data = "Email=myemail&Password=1234567&keepMeOn=false"; 
     byte[] send = Encoding.Default.GetBytes(data); 
     request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; 
     request.Headers.Add("Accept-Language: ro-RO,ro;q=0.8,en-US;q=0.6,en;q=0.4"); 
     request.Headers.Add("Cache-Control: max-age=0"); 
     request.KeepAlive = true; 
     request.UnsafeAuthenticatedConnectionSharing = true; 
     request.ServicePoint.ConnectionLimit = 1; 
     request.ServicePoint.UseNagleAlgorithm = false; 
     request.ServicePoint.Expect100Continue = false; 

     request.Method = "POST"; 
     request.UserAgent = 
      "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36"; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     request.ContentLength = send.Length; 
     request.AllowAutoRedirect = true; 
     Stream sout = request.GetRequestStream(); 
     sout.Write(send, 0, send.Length); 
     sout.Flush(); 
     sout.Close(); 
     Console.WriteLine("\nThe HTTP request Headers for the first request are: \n{0}", request.Headers); 

     IAsyncResult result = (IAsyncResult)request.BeginGetResponse(new AsyncCallback(RespCallback), request); 

回调方法

static void RespCallback(IAsyncResult asynchronousResult) 
    { 
     try 
     { 

      HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; 
      WebResponse res = request.GetResponse(); 
      var stream = new StreamReader(res.GetResponseStream()); 
      Console.WriteLine(stream.ReadToEnd()); 
      stream.Close(); 
      res.Close(); 
      Console.WriteLine(); 
     } 
     catch (WebException e) 
     { 
      //do something 
     } 
     catch (Exception e) 
     { 
      //do something 
     } 

    } 

现在,这个代码不工作像我想。它进入我的登录方法,保存会话对象的电子邮件,然后重定向到操作索引,这里出现我的大问题在索引方法对象会话为空。 让我们来看看代码

登录方法

[HttpPost] 
    public ActionResult Login(LoginDto login) 
    { 
     // if email and password are ok the save email on the sessio 
     // then reirect to index 
     //else show error messages(s) return View(login); 
    } 

指数方法

[AuthorizeUser(false)] 
    public ActionResult Index(int pag = 1) 
    { 
     //I built the model 
     return View(new HomePageModel 
     { 
      CUrrentPage = pag, 
      Articles = model, 
      MaxPage = totalpagesArticles 
     }); 
    } 

所以,我将不会收到来自指数法的内容,因为我没有被授权。 用于保存会话对象上的电子邮件的代码是这样的:

public void SaveDetaliiUser(SessionUserDetails userDetails) 
    { 
     HttpContext.Current.Session[SessionDetaliiUtilizator] = userDetails; 
    } 

之前就写到这里我在网上搜索了我的问题的解决方案,并通过以下链接没有帮助我

How to send KeepAlive header correctly in c#?

C# - Connection: keep-alive Header is Not Being Sent During HttpWebRequest

Keep a http connection alive in C#?

http://social.msdn.microsoft.com/Forums/en-US/87bc7029-ce23-438a-a767-f7c32dcc63a7/how-to-keep-connection-live-while-using-httpwebrequest?forum=netfxnetcom

谢谢你在前进,

玛丽安

+0

也许你应该重塑你的问题,只使用对你的问题至关重要的代码。 – romanoza 2014-08-30 09:46:27

+0

服务器端代码完美。如果我使用brawser或Fiddler工具,结果是好的。我认为我的问题是当我构建HttpRequest对象时,但在这种情况下,我不知道我是否犯了错误或者忘记了设置必要的属性。 – roroinpho21 2014-08-30 12:47:48

回答

0

我终于解决了这个问题。它似乎在重定向期间保持会话我应该设置request.CookieContainer = new CookieContainer();