C# 使用过滤器读取/修改MVC操作的响应
我有一个HttpPost操作,如下所示:C# 使用过滤器读取/修改MVC操作的响应,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个HttpPost操作,如下所示: [HttpPost] public string GetPerson() { string output = GetPerson(); return output; } 我将xml作为字符串返回。是否可以在actionfilter OnResultExecuted或OnResultExecuting方法中读取此字符串?在每个actionfilter上,您都可以获得结果(一个ActionResult对象) 对于OnResultExecut
[HttpPost]
public string GetPerson()
{
string output = GetPerson();
return output;
}
我将xml作为字符串返回。是否可以在actionfilter OnResultExecuted或OnResultExecuting方法中读取此字符串?在每个actionfilter上,您都可以获得结果(一个
ActionResult
对象)
对于OnResultExecuted
,您可以从ResultExecutedContext.Result
属性获取它
我在下面添加了一个示例
public class InterceptValueAttribute : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
var result = filterContext.Result as ContentResult;
var data = result.Content;
//use data as required
}
}
您可以在您的操作中使用它,如下所示
[HttpPost]
[InterceptValue]
public string GetPerson()
{
string output = GetPerson();
return output;
}
是的,您必须创建一个新属性。你想达到什么目的?@Mads。。。谢谢你的帮助。我想记录所有的传入和传出。我可以捕获请求,但无法读取响应。@OmerK我已经更新了我的答案,以包含一个示例。thx,这就是我要找的。但如果我的动作返回视图,上面的动作是否又起作用了?@OmerK不是真的。。。当action为视图返回字符串时(这就是我使用内容结果的原因),您仍然可以从ActionResult数据中记录任何您想要的内容。@OmerK而不是
result.content
如果您期望的是ActionResult而不是ContentResult,您可以说result.ToString()
。@OmerK-如果(filterContext.Result是ContentResult){…}否则如果(filterContext.Result.is ActionResult){…}并根据您的结果类型采取适当的操作。