2014-01-14 5 views
0

Я использую Asp.net MVC, и я пытаюсь отладить мой метод, записав данные сообщения в файл журнала.Получение данных после запроса от запроса возвращается

Я взял это сообщение C# .net equivilent of HTTP_RAW_POST_DATA? и попытался запустить его.

Вот мой ActionResult:

public ActionResult Receipt(string id) 
    { 
     try 
     { 
     using (var sw = new StreamWriter(@"C:\LOGS\RECEIPTLOG.TXT", true)) 
     { 
      sw.WriteLine("-------------------------------------------"); 
      sw.WriteLine("Start Receipt: " + DateTime.Now); 
      sw.WriteLine("Browser: " + Request.Browser.Id); 
      sw.WriteLine("Browser Version: {0}.{1}", Request.Browser.MajorVersion, Request.Browser.MinorVersion); 
      sw.WriteLine("Request.UserHostAddress: " + Request.UserHostAddress); 
      if (Request.UrlReferrer != null) 
      { 
      sw.WriteLine("Request.UrlReferrer: " + Request.UrlReferrer); 
      } 

      foreach (var headerKey in Request.Headers.Keys) 
      { 
      var headerValues = Response.Headers.GetValues(headerKey.ToString()); 
      if (headerValues != null) 
      { 
       sw.WriteLine("Response Header: {0}, Value: {1}", headerKey, String.Join(";", headerValues)); 
      } 
      } 
     } 
     } 
     catch (Exception ex) 
     { 
     Console.WriteLine("error:" + ex.Message); 
     } 

     var control = Logging.StartLog(); 
     control.Source = SourceEnum.WebPortal; 

     try 
     { 
     Logging.WriteLog("Start Receipt"); 

     var count = 0; 
     var postVals = new Dictionary<string, string>(); 
     foreach (var key in Request.Form.AllKeys) 
     { 
      Logging.WriteLog("count: " + count); 
      Logging.WriteLog(string.Format("key: {0} Value: {1}", key, Request.Form[key])); 
      postVals.Add(key, Request.Form[key]); 
      Logging.WriteLog("finished count: " + count); 
      count++; 
     } 
     Logging.WriteLog("finished processing ALLKeys"); 
     var paymentReq = createPaymentRequest(postVals); 
     Logging.WriteLog("finished processing 'var paymentReq = createPaymentRequest(postVals)' "); 

     Logging.WriteLog("_client.RecordPaymentWithRequest start"); 
     var receipt = _client.RecordPaymentWithRequest(paymentReq); 
     Logging.WriteLog("Running _client.RecordPaymentWithRequest complete"); 
     var retval = PartialView(receipt.Duplicate ? "Duplicate Receipt" : "Receipt", receipt); 
     Logging.WriteLog(string.Format("retval: {0}", retval)); 
     return retval; 
     } 
     catch (Exception ex) 
     { 
     Logging.WriteException(ex); 
     throw; 
     } 
     finally 
     { 
     Logging.WriteLog(control, "End RegisterNewAccountEmail"); 

     try 
     { 
      using (var sw = new StreamWriter(@"C:\LOGS\RECEIPTLOG.TXT", true)) 
      { 
      sw.WriteLine("Stop Receipt: " + DateTime.Now); 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("error:" + ex.Message); 
     } 

     } 
    } 

Это то, что в конечном итоге в моем журнале:

------------------------------------------- 
Start Receipt: 1/14/2014 7:17:07 AM 
Browser: internetexplorer 
Browser Version: 11.0 
Request.UserHostAddress: xxx.xxx.xxx.xxx 
Request.UrlReferrer: website url here 
Stop Receipt: 1/14/2014 7:17:07 AM 

Как вы можете видеть, что нет никакой информации заголовка записывается.

Я собираюсь сделать это неправильно, чтобы вывести данные сообщения в файл журнала? Если нет, любые идеи, почему моя информация заголовка не записывается в журнал?

** UPDATE **

Я добавил это к моим лесозаготовкам в первую попытке/улове:

sw.WriteLine("Request.Headers.Keys.Count: " + Request.Headers.Keys.Count); 

и это результаты:

Request.Headers.Keys.Count: 11 
+0

Вы уверены, что используете POSTING? Запросы GET не имеют тела. Что такое 'Request.ContentLength'? – spender

+0

Отладка кода - есть ли значения в headerValues? Кроме того, убедитесь, что вы публикуете свои данные: добавьте POST-атрибут к вашему действию. –

+0

Я добавил дополнительную информацию, keys.count равно 11. Я предполагаю, что это значит, что есть данные для публикации? – ErocM

ответ

1

Используйте Request.Headers .AllKeys вместо ключей.

AllKeys возвращает массив строк, который вы хотите.
KeysNameObjectCollectionBase.KeysCollection Class

+0

'foreach (var headerKey in Request.Headers.AllKeys)' Это правильно? Если это так, он все равно не дает результата. – ErocM

+0

[Это должно работать] (http://stackoverflow.com/questions/2628584/how-to-dump-asp-net-request-headers-to-string), также на странице документации для свойств заголовка есть [пример ] (http://msdn.microsoft.com/en-us/library/system.web.httprequest.headers.aspx), где они делают именно то, что вы хотите. – Rui

+0

Я изменил цикл, чтобы использовать пример, который вы дали, и это сработало! Благодаря! – ErocM

Смежные вопросы