C# 使用过滤器读取/修改MVC操作的响应

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操作,如下所示:

[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){…}并根据您的结果类型采取适当的操作。