我是新来ASP.net(Visual Studio 2010中,.NET 3.5),我想做到以下几点:包装所有ASP.net JSON响应/返回一个匿名对象
我使用OperationContracts到将Web服务数据提供为JSON。用angularJS编写的移动应用程序正在使用这些JSON响应。
我希望每个OperationContract响应都是由标准响应对象包装的相关数据对象。
e.g:
{
error: false,
error_detail: '',
authenticated: false,
data: { }
}
内的数据变量将任何需要每个单独的请求类型的。
移动应用程序检查相关变量,如果一切正常,则将数据传递给任何请求的数据(此部分正在工作并准备就绪)。
我知道它经常被人忽视,但我希望基本上可以返回一个匿名对象,因为我可以很容易地构建一个匿名对象和任何我需要的数据,但似乎我强烈否认这样做的能力。理想情况下,我不想在移动应用程序端添加另一层反序列化或其他内容,我希望尽可能少地处理客户端。
我很容易就能根据自己的测试Web API项目(请参阅下面的示例控制器)获得此项工作,但不幸的是我正在添加到现有项目中,而不是开始新项目。
任何人都可以提供任何建议吗?
示例Web API代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace tut3.Controllers
{
public class ValuesController : ApiController
{
/**
* Take the provided dataResponse object and embed it into
* the data variable of the default response object
**/
private object Response(object dataResponse)
{
return new
{
success = false,
error = "",
error_detail = "",
authenticated = false,
token = "",
token_expiry = 0,
data = dataResponse
};
}
/**
* This could be a normal web service that uses the Knadel database etc etc, the only difference is
* the return is sent through the Response() function
**/
public object Get()
{
object[] local = new[] {
new { cat = "cat", dog = "dog" },
new { cat = "cat", dog = "dog" },
new { cat = "cat", dog = "dog" },
new { cat = "cat", dog = "dog" },
new { cat = "cat", dog = "dog" }
};
/**
* Pass local to Response(), embed it in data and then return the whole thing
**/
return Response(local);
}
}
}
感谢卡斯帕尔,遗憾或不响应更快。我曾希望能避免严格定义被发回的对象,但我认为情况并非如此,实际上这并不是什么大事。 – 2015-03-05 11:41:13