相关疑难解决方法(0)

如何从C#中的Web Api方法正确获取字节数组?

我有以下控制器方法:

[HttpPost]
[Route("SomeRoute")]
public byte[] MyMethod([FromBody] string ID)
{
  byte[] mybytearray = db.getmybytearray(ID);//working fine,returning proper result.
  return mybytearray;
}
Run Code Online (Sandbox Code Playgroud)

现在在调用方法(这也是另一个WebApi方法!)我写的像这样:

private HttpClient client = new HttpClient ();
private HttpResponseMessage response = new HttpResponseMessage ();
byte[] mybytearray = null;
response = client.GetAsync(string.Format("api/ABC/MyMethod/{0}", ID)).Result;
if (response.IsSuccessStatusCode)
{
    mybytearray = response.Content.ReadAsByteArrayAsync().Result;//Here is the problem
} 
Run Code Online (Sandbox Code Playgroud)

现在,问题是字节数​​组MyMethod发送的是528字节,但是在这之后ReadAsByteArrayAsync,大小变得更大(706字节)并且这些值也被放大了.

有点打击我的头,任何帮助将不胜感激.

谢谢!

c# asp.net-web-api

34
推荐指数
5
解决办法
7万
查看次数

使用AngularJS和ASP.NET Web API上载/下载字节数组

我花了几天时间研究和研究上传/下载byte []的解决方案.我很接近,但有一个问题似乎出现在我的AngularJS代码块中.

SO上有一个类似的问题,但它没有回应.请参阅/sf/ask/1669476581/

以下是在我陈述问题之前设置上下文的一些背景信息.

  1. 我正在尝试创建一个通用的客户端/服务器接口来上传和下载byte [],它们被用作专有服务器数据库的一部分.
  2. 我在客户端上使用TypeScript,AngularJS,JavaScript和Bootstrap CSS来创建单页面应用程序(SPA).
  3. 我在服务器上使用ASP.NET Web API/C#.

正在开发SPA以替换Silverlight中开发的现有产品,因此它受现有系统要求的限制.SPA还需要针对广泛的设备(移动设备到桌面设备)和主要操作系统.

在几个在线资源(下面列出)的帮助下,我已经完成了大部分代码.我在下面的Byte Rot链接中使用异步多媒体格式化程序来实现byte [].

http://byterot.blogspot.com/2012/04/aspnet-web-api-series-part-5.html

从ASP.NET Web API中的控制器返回二进制文件

  1. 我在客户端使用转换为Uint8Array的jpeg作为我的测试用例.
  2. 实际的系统字节数组将包含压缩成预定义数据包的混合内容.但是,我需要能够处理任何有效的字节数组,因此图像是一个有效的测试用例.
  3. 使用下面显示的客户端和服务器代码以及Byte Rot Formatter(未显示但在其网站上提供)将数据正确地传输到服务器.
  4. 我已经验证了jpeg在服务器上作为byte []和字符串参数元数据正确接收.
  5. 我使用Fiddler来验证是否将正确的响应发送回客户端.
    • 大小是正确的
    • 该图像可在Fiddler中查看.
  6. 我的问题是下面显示的Angular客户端代码中的服务器响应不正确.

    • 如果不正确,我的意思是错误的大小(~10K对比~27.5K)并且它不被识别为UintArray构造函数的有效值.当我将光标放在下面客户端代码中显示的返回"响应"上时,Visual Studio显示JFIF,但没有其他可见的内容指示符.

/**********************服务器代码************************/ 在[FromBody] byte []之后为代码添加了缺失项

public class ItemUploadController : ApiController{ 
[AcceptVerbs("Post")]
    public HttpResponseMessage Upload(string var1, string var2, [FromBody]byte[] item){
        HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
        var stream = new MemoryStream(item);
        result.Content = new StreamContent(stream);
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

/*****************示例客户端代码********************/

我从代码中省略的唯一内容是实际的变量参数. …

javascript c# asp.net-web-api angularjs typescript

12
推荐指数
1
解决办法
3万
查看次数

标签 统计

asp.net-web-api ×2

c# ×2

angularjs ×1

javascript ×1

typescript ×1