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什么的