我正在使用Asp.net MVC,並試圖通過將發佈數據寫入日誌文件來調試我的方法。從請求中獲取發佈數據將返回null
我把這個帖子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
正如你可以看到有沒有被寫入標題信息。
我要對這個錯誤後的數據轉儲到一個日誌文件?如果沒有,爲什麼我的標題信息沒有寫入日誌?
**更新**
我第一個的try/catch內將此添加到我的日誌:
sw.WriteLine("Request.Headers.Keys.Count: " + Request.Headers.Keys.Count);
,這是結果:
Request.Headers.Keys.Count: 11
您確定要發佈嗎? GET請求沒有主體。什麼是'Request.ContentLength'? – spender
調試你的代碼 - headerValues中是否有任何值?另外,請確保您發佈數據:將POST屬性添加到您的操作中。 –
我添加了附加信息,keys.count是11.我認爲這意味着有發佈數據? – ErocM