C# 单个整数的Web API响应类型

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

调用只返回单个整数的Web API REST服务的“正确”方法是什么

我在这里没有XML、JSON或其他方面的要求。对服务的调用只需要返回一个整数

我是否在此处使用
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响应的公共逻辑移动到单独的类中
  • 通过隐藏构造响应的低级细节,使控制器操作的意图更加清晰

也可以使用单个数字,因此您完全可以返回一个数字作为JSON。或者用一个
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
时失败了。如果那边有人帮忙,我们将不胜感激,谢谢。