Roy*_*mir 2 asp.net json asp.net-web-api
我们正在与移动软件公司合作,在移动设备上完成我们的应用程序.
我们的控制器有(简化)方法,如:
api/users/1
–GetUserById(...)
api/users/changePassword
–ChangePassword(Person p)
Run Code Online (Sandbox Code Playgroud)
好.
该ChangePassword
可以返回一些应用性的错误代码(密码已经使用,密码太短,密码喇嘛喇嘛...)
因此,例如,如果已经使用了密码,那么HttpCode
应该200
返回附加信息
我们就每个回复达成了这个约定:( 除响应数据外)
{
"Success":0,
"ErrorCode": 6,
"ErrorMessage":"already used"
}
Run Code Online (Sandbox Code Playgroud)
但正如我所说,这种结构应该在每一个回应中.
所以到现在为止 - 例如:api/users/1
返回:
{
"userId":1,
"name":"John"
}
Run Code Online (Sandbox Code Playgroud)
但现在 - 响应应该是:
{
"data":
{
"userId":1,
"name":"John"
}
,
"result": //no errors
{
"Success":0,
"ErrorCode": 0,
"ErrorMessage":""
}
}
Run Code Online (Sandbox Code Playgroud)
他们总是在寻找"结果"对象来查看应用反应.
题
我假设我应该做的地方是在消息处理程序之后base.SendAsync
(响应部分)
但是我应该如何Request.CreateResponseMessage
使用格式+值包装我发送的常规响应:
NB,当然在Request.CreateResponseMessage
阶段I已经有了具有适当结果代码的结果对象.
当消息处理程序在Web API管道中运行时,您的操作方法生成的结果将被序列化.动作过滤器是更好的选择,因为你可以处理对象,你可以做这样的事情.
public class MyActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext context)
{
var content = context.Response.Content as ObjectContent;
if (content != null)
{
content.Value =
new MyResponse()
{
Result = new Result() { Success = 0, ErrorCode = 6 },
Data = content.Value
};
}
}
}
public class Result
{
public int Success { get; set; }
public int ErrorCode { get; set; }
}
public class MyResponse
{
public Result Result { get; set; }
public object Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
注意:上面的代码仅适用于JSON而不适用于XML.
归档时间: |
|
查看次数: |
810 次 |
最近记录: |