c# - 将图像发送到休息服务 xamarin 表单

标签 c# image rest web-services xamarin.forms

我正在尝试将图像从 Xamarin Forms 发送到 Rest WebApi,但没有成功。我正在使用 Montemagno 的 CrossMedia 插件。我以这种方式将 MediaFile 转换为 base64String:

if (photo != null)
{
    var stream = photo.GetStream();
    var bytes = new byte[stream.Length];
    await stream.ReadAsync(bytes, 0, (int)stream.Length);
    string imageBase64 = Convert.ToBase64String(bytes);
    Task<string> sendFotoResult = restClient.SendImage(imageBase64);
    string result = await sendFotoResult;
    if( ... )
}

这是我的 SendImage 函数:

public async Task<string> SendImage(string foto)
{
  try
  {
     // METHOD 1 
     var content = JsonConvert.SerializeObject(foto);
     string url = "http://myaddress/myWS/api/Home/SendImage?foto="+ content;
     var response = await _client.PostAsync(url, new StringContent(content, Encoding.UTF8, "application/json"));
     return response.ReasonPhrase.ToString();

     //METHOD 2
     var content = JsonConvert.SerializeObject(foto);
     string url = "http://myaddress/myWS/api/Home/SendImage?foto="+ content;
     var result = await _client.PostAsync(url, new StringContent(content, Encoding.UTF8, "application/json"));
     return result.ToString(); 
  }catch (Exception ex)
  {
    return ex.Message;
  }
}

方法一显示空参数错误,方法二获取URL太长错误。

我该如何解决? 将图像转换为 base64String 是发送图像的最佳方式吗?

非常感谢。

最佳答案

您不应该在 URI 上发送图像。您所要做的就是将图像发送到您的请求正文中。像这样的东西会帮助你:

var client = new HttpClient();
var form = new MultipartFormDataContent();
form.Add(new ByteArrayContent(new MemoryStream(foto).ToArray()), "foto", "foto.jpg");

然后你必须在服务器端 api 上管理图像并将其转换回来。

编辑:我假设如果您还控制您的 REST api,那么您必须尝试从 uri 获取图像。你不应该那样做,而是你必须做的是从内容中获取它。这是一个教程,将引导您一路走来:https://jamessdixon.wordpress.com/2013/10/01/handling-images-in-webapi/

此外,您应该像这样调用不带参数的 POST 方法:

string url = "http://myaddress/myWS/api/Home/"

如果你已经在 Home Controller 上管理 POST 来做一些其他工作,那么你总是可以使用路由并调用这样的东西:

string url = "http://myaddress/myWS/api/Home/Images/"

ASP.NET 上的路由非常易于管理,此链接对此进行了很好的描述:https://learn.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

最后,我怀疑您可能需要加强有关标准所关注的 REST 知识。我总是推荐以下页面来了解设计 RESTful API 应该做什么和不应该做什么:http://blog.octo.com/en/design-a-rest-api/

关于c# - 将图像发送到休息服务 xamarin 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48503532/

相关文章:

c# - asp.net 中的文件处理程序

php - glob php - 从目录返回所有类型的图像

java - 图像不是显示在 jar 中而是显示在编译器中?

python - 谷歌云 Composer 获取 Airflow webserver_id

c#:一般将非托管数组转换为托管列表

c# - 引发事件或返回 bool 值?

c# - 使用 MetadataExtractor GetDescription 获取方向时出现问题

css - Symfony 2 Assets 元素布局和资源管理

java - 使用应用程序在 Safari 上获取 "Assertion failed: (anonymous function)"

rest - 找不到 REST 资源时返回 404 是否正确?