Return 来自 Web 的字符串 API .NET Core get 操作

Return string from Web API .NET Core get operation

我有一个 get 操作,我想从中 return 一个字符串。一个例子是

"000875"

当我 return 这个字符串来自我的 Web API 完全 .NET 中的控制器时,它的格式如下:

{
  "Property": "000875"
}

当我 return 转换后的 .NET Core 控制器中的字符串时,它 return 是这样的:

{
  "$id": "1",
  "$type": "System.Net.Http.HttpResponseMessage, System.Net.Http",
  "Version": "1.1",
  "Content": {
    "$id": "2",
    "$type": "System.Net.Http.StringContent, System.Net.Http",
    "Headers": [
      {
        "Key": "Content-Type",
        "Value": [
          "application/json; charset=utf-8"
        ]
      }
    ]
  },
  "StatusCode": "OK",
  "ReasonPhrase": "OK",
  "Headers": [],
  "TrailingHeaders": [],
  "RequestMessage": null,
  "IsSuccessStatusCode": true
}

有趣的是,值甚至不在其中!

我正在 运行 一些有趣的 JSON 序列化以使 BreezeJs 与 .NET Core 一起工作。有可能是这个怪现象的原因:

.AddNewtonsoftJson(opt =>
{
   // Let Breeze say how we serialize.  This adds in the Type and Id options the way breeze expects
   var jsonSerializerSettings = JsonSerializationFns.UpdateWithDefaults(opt.SerializerSettings);
   ......

我希望有一种方法可以让字符串通过而不会造成所有这些混乱。可以吗?

我的印象是主题动作定义 returns HttpResponseMessage.

public HttpResponseMessage MyAction(....

HttpRequestMessage不再是asp.net核心框架中的第一个class公民,将被视为普通模型并序列化。

这解释了您在控制器上看到的 JSON

语法需要更新为 return IActionResult 派生响应

public IActionResult MyAction() {

    //...

    return Ok("000875");
}

ActionResult<T>

public ActionResult<string> MyAction() {

    //...
    if(somecondition)
        return NotFound();

    return "000875";
}

或模型本身。

public string MyAction() {

    //...

    return "000875";
}

引用Controller action return types in ASP.NET Core Web API