【问题标题】:Xamarin Forms, Android and HttpClient issueXamarin 表单、Android 和 HttpClient 问题
【发布时间】:2017-06-07 10:01:08
【问题描述】:

我在Xamarin Forms 中为iOS 创建了一个HttpClient 函数,用于将图片从设备发送到我的服务器。核心功能是

var content = new MultipartFormDataContent();

var fileContent = new ByteArrayContent(fileBytes);
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
    FileName = fName
};
fileContent.Headers.ContentDisposition.Parameters
                   .Add(new NameValueHeaderValue("userId", UserId.ToString()));
content.Add(fileContent);

using (var client = new HttpClient()) {
    client.DefaultRequestHeaders.Add("authenticationToken", SyncData.Token);

    HttpResponseMessage response = await client.PostAsync(url, content);
    if (response.IsSuccessStatusCode)
    {
        // more code
    }
}

我正在使用System.Net.Http。我尝试在 Android 中的一个项目中使用相同的功能,但令人惊讶的是它不起作用。问题出在标题中:如果我检查fileContent,我可以看到每个键,但服务器上的 webapi 没有收到FileName

在一些日志之后,我更改了这个函数,添加了更多client.DefaultRequestHeaders 喜欢

client.DefaultRequestHeaders.Add("FileName", fName);

现在 webapi 接收FileName 参数。

现在我的问题是:我做错了什么?

【问题讨论】:

    标签: android xamarin.forms dotnet-httpclient


    【解决方案1】:

    就我个人而言,我在 MultipartFormDataContent 上使用 Add 方法,它接受一个文件名。

    var content = new MultipartFormDataContent();
    var fileContent = new ByteArrayContent(fileBytes);
    
    ...
    
    // Use the overload Add method which accepts a file name
    content.Add(fileContent, "FileName", fName);
    
    ...
    

    我不确定这是否能解决您的问题,但它对我有用。

    【讨论】:

    • 谢谢@deckerton_9000,我用client.DefaultRequestHeaders.Add("FileName", fName);解决了这个问题。我的问题是我的httpclient 无法在 iOS 和 Android 之间共享
    • 你考虑过使用 nuget 包“Microsoft.Net.Http”吗?这应该适用于 Android 和 iOS。注意:您必须在添加此 nuget 之前删除对 System.Net.Http 的项目引用以避免命名空间冲突和绑定重定向。
    • 如果您使用可移植类库,您绝对可以在 Android 和 iOS 之间共享 HttpClient 代码。
    • 是的,我知道,但在这种情况下,我必须检查 Device.RuntimePlatform 并执行两个不同的代码,一个用于 iOS,一个用于 Android
    猜你喜欢
    • 2015-12-22
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多