我正在开发一款地铁应用。我使用后台上传器上传文件,但我的问题是如何在上传后获得响应值。我这样编码:
BackgroundUploader uploader = new BackgroundUploader();
uploader.SetRequestHeader("Content-Disposition", "form-data");
uploader.SetRequestHeader("name", "userfile");
uploader.SetRequestHeader("filename", App.ViewModel.DeviceId + ".png");
uploader.SetRequestHeader("Content-Type", "multipart/form-data");
UploadOperation upload = uploader.CreateUpload(uri, file);
await upload.StartAsync();
答案 0 :(得分:7)
在注意到我的上传进度对象中有BytesReceived后,我想出了以下内容。
async private Task<string> GetUploadResponseBody(UploadOperation operation)
{
string responseBody = string.Empty;
using (var response = operation.GetResultStreamAt(0))
{
uint size = (uint)operation.Progress.BytesReceived;
IBuffer buffer = new Windows.Storage.Streams.Buffer(size);
var f = await response.ReadAsync(buffer, size, InputStreamOptions.None);
using (var dr = DataReader.FromBuffer(f))
{
responseBody = dr.ReadString(dr.UnconsumedBufferLength);
}
}
return responseBody;
}
答案 1 :(得分:1)
upload.StartAsync().Completed = UploadCompletedHandler;
...
void UploadCompletedHandler(IAsyncOperationWithProgress<TResult, TProgress> asyncInfo,
AsyncStatus asyncStatus)
{
// get a response body from an asyncInfo using the asyncInfo.GetResults() method
}
关注此资源:
答案 2 :(得分:0)
过去几天我一直在寻找同样的东西而且没有运气。终于发现你做不到这一点。您可以获取响应的“标题”,但无法从BackgroundTransfer getResponseInformation()方法获取响应的“正文”。
目前,这是Windows API的限制。希望他们能尽快加入。
解决方法是您可以在响应中添加自定义标头。为此,您需要修改服务器端脚本。但是,如果您对服务器端脚本没有任何控制权,那么请使用代理脚本来执行应用程序和远程服务器之间的通信。对于我的情况,我在php中创建了一个与远程服务器通信的代理脚本,在获得响应后,我将其添加到自定义标头密钥中。
然后在完整方法的应用程序中使用:
function complete(e){
var mykey = e.getResponseInformation().headers.lookup("mykey");
}
希望这会有所帮助。