从请求获取帖子数据返回null

埃罗克

我正在使用Asp.net MVC,并且试图通过将发布数据写入日志文件来调试我的方法。

我接受了HTTP_RAW_POST_DATA的C#.net等值帖子并尝试运行它。

这是我的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

如您所见,没有标题信息被写入。

我是否会因为将发布数据转储到日志文件中而出错?如果没有,为什么我的标题信息没有写入日志?

** 更新 **

我在第一次try / catch中将其添加到了日志记录中:

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

结果如下:

Request.Headers.Keys.Count: 11
Rui

使用Request.Headers.AllKeys而不是Keys。

AllKeys返回所需的字符串数组。
返回NameObjectCollectionBase.KeysCollection类

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章