下面的 content.Add
行是否会使对象无法正确处理?如果是这样,处理此问题的正确方法是什么。
public string UploadGameToWebsite(string filename, string url, string method = null)
{
var client = new HttpClient();
var content = new MultipartFormDataContent();
content.Add(new StreamContent(File.Open(filename, FileMode.Open, FileAccess.Read)), "Game", "Game.txt");
var task = client.PutAsync(url, content);
var result = task.Result.ToString();
return result;
}
最佳答案
- 如果您要在您的方法中调用异步操作,请将您的方法设为异步。
- 配置您的文件流和客户端。在下面的示例中,通过处置
StreamContent
,它还处置了底层的FileStream
。 - 我更喜欢使用 finally block 来处理多个一次性对象,嵌套
using
语句也非常好。 - 不确定为什么要在
HttpResponseMessage
上返回ToString
,也许状态代码会更有用,或者查看 StatusCode = 200 并返回 bool 值(真/假) ?
代码:
public async Task<string> UploadGameToWebsiteAsync(string filename, string url, string method = null)
{
HttpClient client = null;
StreamContent fileStream = null;
try
{
client = new HttpClient();
fileStream = new StreamContent(System.IO.File.Open(filename, FileMode.Open, FileAccess.Read))
var content = new MultipartFormDataContent();
content.Add(fileStream, "Game", "Game.txt");
HttpResponseMessage result = await client.PutAsync(url, content);
return result.ToString();
}
finally
{
// c# 6 syntax
client?.Dispose();
fileStream?.Dispose(); // StreamContent also disposes the underlying file stream
}
}
代码版本 #2 使用 using
block 。
public async Task<string> UploadGameToWebsiteAsync(string filename, string url, string method = null)
{
using (var client = new HttpClient())
{
using (var fileStream = new StreamContent(System.IO.File.Open(filename, FileMode.Open, FileAccess.Read)))
{
var content = new MultipartFormDataContent();
content.Add(fileStream, "Game", "Game.txt");
HttpResponseMessage result = await client.PutAsync(url, content);
return result.ToString();
}
}
}
关于c# - 处理 File.Open 或 StreamContent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35753081/