我得到了' 414(Request-URI太长)'通过web api将我的图像作为Base64编码的字符串返回时出错。
我目前在我的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);
}
});
}
采取什么更好的方法来避免这种情况发生?
答案 0 :(得分:1)
我强烈建议你使用stream而不是Base64String。它高效快捷。在这里你可以找到一个很好的例子: Returning binary file from controller in 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;
}
希望这可以解决您的问题。