雖然授予的答案指的是ReadAsStringAsync,但答案卻沒有例子。我遵循gdp的建議並衍生出一個有點可行的例子...
我創建了一個名爲MessageInterceptor的類。除了派生自ActionFilterAttribute之外,我沒有做任何事情,它在控制器獲取它之前以及控制器完成之後立即開始攔截webAPI方法調用。這是我的最後一堂課。本示例使用XML序列化程序將請求和響應都轉換爲XML字符串。此示例將請求和響應作爲填充對象進行查找,這意味着已經發生了反序列化。從已填充模型收集數據並序列化爲XML字符串是請求和響應的表示 - 而不是IIS發回的實際發佈請求和響應。
代碼示例 - MessageInterceptor
using System.IO;
using System.Linq;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using System.Xml.Serialization;
namespace webapi_test
{
public class MessageInterceptor : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
var headers = actionContext.Request.Content.Headers.ToString();
var request = actionContext.ActionArguments.FirstOrDefault().Value;
var xml = SerializeXMLSerializer(request, "");
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
base.OnActionExecuted(actionExecutedContext);
var headers = actionExecutedContext.Response.Content.Headers.ToString();
var response = actionExecutedContext.Response.Content.ReadAsStringAsync().Result;
var xml = SerializeXMLSerializer(response, "");
}
public static string SerializeXMLSerializer(object o, string nameSpace)
{
string serializedValue;
var writer = new StringWriter();
XmlSerializer serializer = new XmlSerializer(o.GetType(), nameSpace);
serializer.Serialize(writer, o);
serializedValue = writer.ToString();
return serializedValue;
}
}
}
分享一些碼。您正在使用測試版還是源代碼版本?這個對我有用。 – Aliostad 2012-04-23 22:03:12
@Aliostad嗨,即時通訊使用測試版。你在用什麼? – gdp 2012-04-24 05:38:31
我正在使用相同的測試版。 – Aliostad 2012-04-24 08:39:04