我正在尝试在C#中编写一个连接到数据库的简单REST API。现在,我正在POST
处理我的一个对象,并且我试图根据该操作的结果返回HttpResponseMessage
。出于某种原因,当我尝试返回HttpResponseMessage
时,它会被序列化为JSON
!
以下是POST
方法的代码:
[HttpPost]
public HttpResponseMessage Post([FromBody] Product product)
{
MySqlConnection connection = new MySqlConnection(connectionString);
connection.Open();
MySqlCommand comm = connection.CreateCommand();
comm.CommandText = "INSERT INTO PRODUCT_T(product_name, price) "
+ "VALUES(@product_name, @price)";
comm.Parameters.AddWithValue("@product_name", product.ProductName);
comm.Parameters.AddWithValue("@price", product.Price);
try
{
comm.ExecuteNonQuery();
}
catch (Exception)
{
Debug.WriteLine("bad request");
return new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest);
}
connection.Close();
return new HttpResponseMessage(System.Net.HttpStatusCode.OK);
}
我正在使用Chrome扩展程序Postman来测试我的API。当我故意发送错误数据时,您可以在下面的屏幕截图中看到响应的状态代码为200
,而代码为HttpResponseMessage
的{{1}}序列化为400
在回应的主体中。
有人可以告诉我如何实际设置响应本身的状态代码吗?
答案 0 :(得分:0)
让所有API返回Task<IHttpActionResult>
示例:强>
[HttpPost]
[Route("api/v1/alerts/helloWorld")]
public async Task<IHttpActionResult> HelloWorld(string someInput) {
return Ok("hello world");
//or, if the request was bad
return BadRequest("hey, you did something wrong!");
}
答案 1 :(得分:0)
你应该看看这个tutoriel它对我的第一个网络API有帮助。就像jhilden说IHttpActionResult更好地处理响应和响应是json格式的共振可能是因为你没有在你的html帖子中指定Accept标头,如果你添加Accept:text / xml你将在xml中看到你的结果