httpResponseMessage.TryGetContentValue不起作用

时间:2017-08-30 14:40:35

标签: c# asp.net-web-api2

调用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

0 个答案:

没有答案