调用httpResponseMessage.TryGetContentValue的行为不符合预期。
我有一个返回IHttpActionResult的WebAPI方法。如果用户传入了不正确的参数,我想发回一个带有自定义消息的响应,所以我有以下内容。请注意我在Content属性中添加消息字符串的位置。
[HttpGet]
public IHttpActionResult ActionResultErrorTest(int id)
{
var payload = "";
if (id == 0)
{
var resp = new HttpResponseMessage(HttpStatusCode.NotFound)
{
Content = new StringContent(string.Format("No product with ID = {0}", id)),
ReasonPhrase = "Product ID Not Found",
};
throw new HttpResponseException(resp);
}
payload = "Success";
return Ok(payload);
}
到目前为止,这么好。接下来,我有一个DelegatingHandler来增强响应。在这段代码中,我调用了HttpResponseMessage.TryGetContentValue()扩展方法。 [澄清我的困惑] 对于ActionResultErrorTest(0),扩展方法返回false。 对于ActionResultErrorTest(1),扩展方法返回true。 我不明白这一点,因为在这两种情况下,内容都包含一个字符串。
这是委托处理程序代码:
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
//Step 1: Wait for the Response
var response = await base.SendAsync(request, cancellationToken);
if (request.RequestUri.AbsoluteUri.Contains("swagger"))
{
return response;
}
return BuildApiResponse(request, response);
}
private HttpResponseMessage BuildApiResponse(HttpRequestMessage request, HttpResponseMessage response)
{
object content;
List<string> modelStateErrors = new List<string>();
bool hasContent = response.TryGetContentValue(out content);
string content2;
bool hasContentString = response.TryGetContentValue<string>(out content2);
string dialogTitle = "";
bool preventUserInput = false;
...
在上面的代码中,即使我设置了Content =&#34;没有ID = 0&#34;的产品,内容和内容2评估为NULL,而hasContent和hasContent2都评估为false