如何测试接收 class 的网络 api post 方法

How to test a web api post method which receives a class

我创建了一个 ASP.NET 网络 API,它有一个名为 ImageSaveController 的控制器。这有一个 InsertImage 方法将数据插入数据库,并且是一个 HttpPost 方法。此方法接收类型为 ImageData 的对象作为参数。控制器代码和参数class如下:

public class ImageSaveController : ApiController
{
    [HttpPost]
    public IHttpActionResult InsertImage(ImageData imageData)
    {
        System.Data.SqlClient.SqlConnection conn = null;
        try
        {               
            //Image save to database code here
        }
        catch (Exception ex)
        {
            return Content(HttpStatusCode.NotModified, ex.Message);
        }
        finally
        {
            if (conn != null)
                conn.Close();
        }
        return Content(HttpStatusCode.OK,""); 
    }
}

//ImageData class
public class ImageData
{
    public int Id { get; set; }
    public byte[] ImageValue { get; set; }
}

我想从客户那里测试一下。正如您所注意到的,ImageData class 的 ImageValue 属性 是一个 byte 数组。不确定如何将 C# class 参数传递给此方法。理想情况下,我想将参数作为 json 传递,但我不确定如何为此构建 json 。我也不确定是否可以使用名为 postman 的 chrome 应用程序对其进行测试。

打开邮递员输入您的 url 以进行操作:
添加 header:Content-Type - application/json。
在 body 选项卡中选中 "raw" (JSON) 并输入您的数据。

POST /api/ImageSave/InsertImage/ HTTP/1.1
Host: localhost:32378
Content-Type: application/json
Cache-Control: no-cache
{
    "id" : 1,
    "imageValue" : [11,141,123,121]
}

来源Web API 2 POST request simulation in POSTMAN Rest Client

如果你想做好测试,更好的办法是写单元测试。

这是我用来做的: 使用像 Postman 或 Fiddler 这样的 REST 客户端测试器。我使用 Postman,它是 Google Chrome.

的应用程序

为了轻松构建 JSON,您可以在控制器上创建一个 HttpGet 方法,并 return 构建一个伪造的 ImageData 并从 Postman 调用它。在这里您将看到 JSON 并将其用于 POST 方法的输入。

public class ImageSaveController : ApiController
{
    public ImageData Get()
    {
         return new ImageData
         {
             // insert test data here
         };
    }

    [HttpPost]
    public IHttpActionResult InsertImage(ImageData imageData)
    {
        System.Data.SqlClient.SqlConnection conn = null;
        try
        {               
            //Image save to database code here
        }
        catch (Exception ex)
        {
            return Content(HttpStatusCode.NotModified, ex.Message);
        }
        finally
        {
            if (conn != null)
                conn.Close();
        }
        return Content(HttpStatusCode.OK,""); 
    }
}