通过 Web api 将我的图像作为 Base64 编码字符串返回时,我收到“414(请求 URI 太长)”错误。
我目前在我的 Web API 控制器中有以下操作:
[System.Web.Http.Route("GetAllEvents")]
public async Task<IEnumerable<Event>> Get()
{
var vm = EventsViewModel.NewInstance;
return await vm.GetAllEvents();
}
和 vm.GetAllEvents() 代码:
public async Task<List<Event>> GetAllEvents()
{
var result = await DataStore.SelectAll();
result.ForEach(x =>
{
var byteArray = File.ReadAllBytes(x.ThumbnailPath);
x.ThumbnailEncoded = Convert.ToBase64String(byteArray);
});
return result;
}
我使用 WebAPI 操作如下:
this.ajaxRetrieve = function(url, data, onSuccessCallback, onErrorCallback) {
$.ajax({
url: url,
data: data,
type: 'GET',
async: false,
dataType: 'JSON',
success: function(result) {
onSuccessCallback(result);
},
error: function(xhr, status, error) {
onErrorCallback(xhr, status, error);
}
});
}
采取什么更好的方法来避免这种情况发生?
我强烈建议您使用流而不是 Base64String。它的高效和快速。在这里你可以找到很好的例子:在 ASP.NET Web API 中从控制器返回二进制文件
更新但您无法使用 web api 返回流数组。所以替代选项是字节数组。像这样:
[HttpGet]
public async Task<List<byte[]>> Get()
{
var files= await GetAllEvents();
return files;
}
和GetAllEvents()
代码:
public async Task<List<byte[]>> GetAllEvents()
{
var list = new List<byte[]>();
for (int i = 0; i < 5; i++)
{
var byteArray = await Task.Run(() => System.IO.File.ReadAllBytes(@"filePath"));
list.Add(byteArray);
}
return list;
}
希望这可以解决您的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句