asp.net-mvc之在 Web API 中执行操作后更改返回的对象值

小虾米 阅读:37 2025-02-15 21:57:57 评论:0

在 ASP.Net Web API 中,操作返回的对象将自动转换为 XML 或 JSON - 有没有办法在转换之前向返回的对象添加额外的处理?

我想要实现的是将返回的对象包装成一个通用的 APIResponse (另一个类)类型,它有一个名为 Data 的对象属性,它将被分配任何原始返回对象是。

例如:

public Books[] FindBooks(string keyword) 
{ 
.. 
    return new Books[] {new Book(){Name="ASP.NET"}}; 
} 

这将默认返回 book 数组的 JSON,但是我想将结果包装到一个名为 APIResponse 的对象中,因此返回的对象变为:

new APIResponse(){ 
    Data = //the Book[] array return from the action method 
} 

通过这样做,我将能够保持在 Web API 中返回正常业务对象的自由,但在前端 Ajax 请求时始终以 JSON 格式返回相同的对象类型。

我相信它可以通过某种方式完成,但是我不熟悉 Web API 生命周期,有什么方法可以为此提供一些指导吗?

谢谢。

请您参考如下方法:

我通过创建一个自定义的 MediaTypeFormatter 来修复它,但是简单地继承了 JSON 格式化程序,它已经得到了我需要的所有东西,这是我添加的非常简单的代码,它解决了我遇到的所有问题!!!

    public class APIResponseMediaFomatter : JsonMediaTypeFormatter 
    { 
        public override Task WriteToStreamAsync(Type type, object value, System.IO.Stream writeStream, System.Net.Http.HttpContent content, System.Net.TransportContext transportContext) 
        { 
            ResponseMessage wrappedValue = null; 
            if (type != typeof(ResponseMessage) || (value != null && value.GetType() != typeof(ResponseMessage))) 
                wrappedValue = new ResponseMessage(value); 
            return base.WriteToStreamAsync(typeof(ResponseMessage), wrappedValue, writeStream, content, transportContext); 
        } 
    } 

干杯!


标签:WEB
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号