如何在C# ApiController中发送字节数组

5

请问如何测试这个函数:

[RoutePrefix("service")]
public class TestControler : ApiController
{
    [Route("function-route")]
    [HttpPost]
    public HttpResponseMessage Testfunction(TestData t_testData )
    {
        ...
        HttpResponseMessage httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK);
        return httpResponseMessage;
    }
}

public class TestData
{
    public byte[] PreviewImage { get; set; }
    public byte[] FileAsByteArray { get; set; }
}

我们通过以下方式启用了Swagger:
public void Configuration(IAppBuilder appBuilder)
{
    // Configure Web API for self-host. 
    HttpConfiguration config = new HttpConfiguration();

    //Using AttributeRoutes
    config.MapHttpAttributeRoutes();

    //Swagger
    config.EnableSwagger(c =>{
        c.SingleApiVersion("v1", "My Test API");
    }).EnableSwaggerUi();

    appBuilder.UseWebApi(config);
}

我真的不知道如何通过swagger、postman或curl测试这个API。问题在于byte[],如何发送它? 有人知道如何测试这种类型的API吗?
或者,如果有另一种方法可以发送任何文件(pdf,txt,docx等)并结合任何图片(jpg,png等),而不使用byte[],我会很高兴听到。

你可以尝试使用HttpPostedFileBase而不是byte[]。 - Andrew
1个回答

12

我会对字节数组进行Base64编码,并将您的模型属性从byte[]更改为string。这样,您就可以将这些字符串发布到控制器上,在那里可以将它们转换回字节数组。

要将其编码为Base64字符串,请使用string byteString = Convert.ToBase64String(byteArray),并使用byte[] byteArray = Convert.FromBase64String(byteString)将其转换回来。

您更新后的代码可能类似于:

public class TestData
{
    public string PreviewImage { get; set; }
    public string FileAsByteArray { get; set; }
}

[Route("function-route")]
[HttpPost]
public HttpResponseMessage Testfunction(TestData t_testData)
{
    // convert base64 string to byte[]
    byte[] preview = Convert.FromBase64String(t_testData.PreviewImage);
    byte[] file = Convert.FromBase64String(t_testData.FileAsByteArray);
    ...
    HttpResponseMessage httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK);
    return httpResponseMessage;
}

为了使用postman进行测试,您可以使用JavaScript函数atob()btoa()将字节数组转换为Base64编码的字符串,反之亦然。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接