C# 单个整数的Web API响应类型
调用只返回单个整数的Web API REST服务的“正确”方法是什么 我在这里没有XML、JSON或其他方面的要求。对服务的调用只需要返回一个整数 我是否在此处使用C# 单个整数的Web API响应类型,c#,asp.net-web-api,asp.net-web-api2,C#,Asp.net Web Api,Asp.net Web Api2,调用只返回单个整数的Web API REST服务的“正确”方法是什么 我在这里没有XML、JSON或其他方面的要求。对服务的调用只需要返回一个整数 我是否在此处使用ResponseType属性 我将服务返回类型设置为HttpResponseMessage,对于返回JSON的服务,我将使用UTF8“application/JSON”将其内容属性设置为StringContent 但是对于单个整数,什么是正确的呢?您可以实现自己的内容类型,该类型派生自HttpContent类,标记为abstract
ResponseType
属性
我将服务返回类型设置为HttpResponseMessage
,对于返回JSON的服务,我将使用UTF8“application/JSON”将其内容属性设置为StringContent
但是对于单个整数,什么是正确的呢?您可以实现自己的内容类型,该类型派生自
HttpContent
类,标记为abstract
StringContent
通过继承ByteArrayContent
间接派生自它
通常,这取决于
int
的真正“含义”。如果这是某种标识符,我会将其包装成某种对象。好吧,这取决于您想要的响应体外观。只是一个数字:
return Request.CreateResponse(HttpStatusCode.OK, "1");
包含以下数字的JSON对象:
var myNumber = new
{
theNumber = 1
};
return Request.CreateResponse(HttpStatusCode.OK, myNumber);
我建议您对API方法使用IHttpActionResult类型。它将允许您使用几种不同的方便方法来返回常见的响应。在您的情况下,它将如下所示:
public IHttpActionResult GetInteger() {
// Ok is a convenience method for returning a 200 Ok response
return Ok(1);
}
或者,如果希望将其包装在对象中以便于JSON使用,则可以使用匿名对象:
public IHttpActionResult GetInteger() {
// Ok is a convenience method for returning a 200 Ok response
return Ok(new {
value = 1
});
}
从文档中总结出使用IHttpActionResult的一些原因:
- 简化控制器的单元测试
- 将用于创建HTTP响应的公共逻辑移动到单独的类中
- 通过隐藏构造响应的低级细节,使控制器操作的意图更加清晰
Result
属性将它包装在某个对象中。我可以这样做。这里没有严格的实现要求,我可以在30秒内完成。我在这个项目中还有其他返回JSON的WebAPI REST方法,它只是一个二叉树的深度。因此,如果树中最低的节点位于61级,我只需要返回61。@据我所知,目前WebAPI中没有IntResponse
。如果您关心您的int
的特殊处理,您可以使用我的建议,其他好的选项已经引入。谢谢,我将查看IHttpActionResult。有太多的代码示例使用Web API执行所有不同的操作,但一个常见的事情似乎是返回HttpResponseMessage。为此,我需要采用最佳实践。我确实看到这篇文章说“假设您已经阅读了上面的文章,建议您使用IHttpActionResult…”。。。IHttpActionResult只是HttpResponseMessage之上的一个抽象,使其更易于使用:)如果需要手动构造响应,您仍然可以在使用ResponseMessageResult返回IHttpActionResult的同时执行此操作。更多信息:我现在想将返回JSON的现有方法转换为使用IHttpActionResult。你是如何转换这样的东西的Request.CreateResponse(HttpStatusCode.OK,new{User=person})代码>?我看到有一个返回Json(result)代码>这将导致HTTP200正常
。这是正确的方法吗?您可以对以前使用HttpStatusCode.Ok的任何内容使用Ok()。所以您只需返回Ok(new{User=person})@Jessecate我在这个问题上提出了一个新问题,因为我很感兴趣,但是我在我的一个更复杂的JSON方法上尝试的尝试在使用IHttpActionResult
时失败了。如果那边有人帮忙,我们将不胜感激,谢谢。