Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用RESTful API,而不考虑SuccessStatusCode_C#_Rest_Asp.net Web Api - Fatal编程技术网

C# 使用RESTful API,而不考虑SuccessStatusCode

C# 使用RESTful API,而不考虑SuccessStatusCode,c#,rest,asp.net-web-api,C#,Rest,Asp.net Web Api,考虑以下代码段: //API definition [HttpPost] [Route("api/v1/Customer")] public IActionResult Post(CustomerModel cusomerModel) { try { if (!ModelState.IsValid) { return BadRequest("BadRequest Data Here"); }

考虑以下代码段:

//API definition
[HttpPost]
[Route("api/v1/Customer")]
public IActionResult Post(CustomerModel cusomerModel)
{
    try
    {
        if (!ModelState.IsValid)
        {
            return BadRequest("BadRequest Data Here");
        }
        //...
        return OK("true");
    }
    catch(Exeption ex)
    {
        return InternalServerError("InternalServerError Data Here");
    }
}

public class CustomerModel
{
    [Required]
    public int Id { get; set; }
    [Required]
    public string UserName { get; set; }
    [Required]
    public string SecretKey { get; set; }
}

//API consumer
var httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("http://localhost:8888/");
var httpResponseMessage = httpClient.PostAsJsonAsync("api/v1/Customer", customer).Result;
如果我是“API消费者”,是否有一种方式可以让我在那里读取响应,而不考虑状态代码,例如:

switch(httpResponseMessage.StatusCode)
{
    case HttpStatusCode.Ok:
        var resultOk = httpResponseMessage.Content.ReadAsAsync<string>().Result; // where Result = "true"
        break;

    case HttpStatusCode.BadRequest:
        var resultBadRequest = httpResponseMessage.Content.ReadAsAsync<string>().Result; // where Result = "BadRequest Data Here"
        break;

    case HttpStatusCode.InternalServerError:
        var resultInternalServerError = httpResponseMessage.Content.ReadAsAsync<string>().Result; // where Result = "InternalServerError Data Here"
        break;
}
开关(httpResponseMessage.StatusCode)
{
案例HttpStatusCode。确定:
var resultOk=httpResponseMessage.Content.ReadAsAsync().Result;//其中Result=“true”
打破
案例HttpStatusCode.BadRequest:
var resultBadRequest=httpResponseMessage.Content.ReadAsAsync().Result;//where Result=“BadRequest Data Here”
打破
案例HttpStatusCode.InternalServerError:
var resultInternalServerError=httpResponseMessage.Content.ReadAsAsync().Result;//where Result=“InternalServerError Data Here”
打破
}

请告知这是否可行。

我没有使用ReadAsAsync方法读取http内容,而是序列化了http内容以返回流,然后使用流读取器从http内容中流出原始内容:

var readStream = new StreamReader(httpResponseMessage.Content.ReadAsStreamAsync().Result, Encoding.UTF8);
switch (httpResponseMessage.StatusCode)
{
    case HttpStatusCode.Ok:
      var resultOk = readStream.ReadToEnd();
       break;

    case HttpStatusCode.BadRequest:
          var resultBadRequest = readStream.ReadToEnd();
       break;

    case HttpStatusCode.InternalServerError:
          var resultInternalServerError = readStream.ReadToEnd();;
       break;
}

似乎只有当HttpResponseMessage返回的状态码为OK时,ReadAsAsync函数才能输出内容。

如果您不关心状态码,为什么要切换它<代码>httpResponseMessage.Content.ReadAsAsync().Result到处重复。如果您想阅读内容,为什么不独立阅读返回的状态码?您的问题不清楚。。。如果你已经写了上面的代码,你就会知道答案,在我阅读的上下文中,“是”就是答案。这就是为什么我说不清楚你在问什么,因为你可以看到这一点。还有@RuiFernandes说的话!把电话拨一次,叫responseText什么的