.NET REST API HttpResponseMessage被序列化为JSON

时间:2016-02-17 18:39:05

标签: c# .net json api rest

我正在尝试在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在回应的主体中。

有人可以告诉我如何实际设置响应本身的状态代码吗?

capture from Postman

2 个答案:

答案 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中看到你的结果