如何设置HttpResponseMessage的值?c#中的内容



我有一个Web API方法,它返回HttpResponseMessage.Content属性中的数据。下面是该方法的代码:

[HttpGet]
public HttpResponseMessage MethodName()
{
try
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent("Hello WORLD", Encoding.UTF8, "application/json");
return response;
}
catch (Exception ex)
{
var response = new HttpResponseMessage(HttpStatusCode.InternalServerError);
response.Content = new StringContent("{"error": "" + ex.Message + ""}", Encoding.UTF8, "application/json");
return response;
}
}

当我从Postman调用这个方法时,响应元数据显示响应的长度为11,这对于"Hello WORLD"是正确的。字符串。但是,我无法在响应体中看到实际数据。

我错过了什么?

下面是响应:

{
"version": "1.1",
"content": {
"headers": [
{
"key": "Content-Type",
"value": [
"application/json; charset=utf-8"
]
},
{
"key": "Content-Length",
"value": [
"11"
]
}
]
},
"statusCode": 200,
"reasonPhrase": "OK",
"headers": [],
"trailingHeaders": [],
"requestMessage": null,
"isSuccessStatusCode": true
}

如果您将使用IActionResult作为方法的返回类型,那么您可以利用基类的OkStatusCode方法。你的方法可以这样重写:

[HttpGet]
public IActionResult MethodName()
{
try
{
return Ok("Hello WORLD");
}
catch (Exception ex)
{
return StatusCode((int)HttpStatusCode.InternalServerError, "{"error": "" + ex.Message + ""}") ;
}
}

坦率地说,我并不真正理解你的try-catch块的唯一目的,但我希望你能明白这一点。


UPDATE # 1

为什么我不能正确设置HttpResponseMessage.Content

StringContent确实有一个叫做Headers的属性。换句话说,该值不作为属性公开。流行的序列化器(如Json。. NET或System.Text.Json)默认只序列化属性。

如果你可以使用JsonContent而不是StringContent,那么序列化将正确工作,因为它将Value暴露为属性。

var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = JsonContent.Create("Hello WORLD");   
var responseInJson = JsonConvert.SerializeObject(response, Formatting.Indented);
responseInJson.Dump();
{
"Version":"1.1",
"Content":{
"ObjectType":"System.String, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"Value":"Hello WORLD",
"Headers":[
{
"Key":"Content-Type",
"Value":[
"application/json; charset=utf-8"
]
}
]
},
"StatusCode":200,
"ReasonPhrase":"OK",
"Headers":[

],
"TrailingHeaders":[

],
"RequestMessage":null,
"IsSuccessStatusCode":true
}

相关。net提琴链接:https://dotnetfiddle.net/NiM8lx

相关内容

  • 没有找到相关文章

最新更新