虽然授予的答案指的是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