Я пытаюсь получить байтовый массив из базы данных и вернуть его в виде изображения, например this
public IActionResult Get(string PictureCode)
{
SqlParameter[] parameters = {new SqlParameter("@PictureCode", PictureCode) };
var PD = db.Picture.FromSql("SIP_API_MONDIA_ItemPicture_sel @PictureCode", parameters).ToList();
var contents = new MemoryStream(PD[0].PictureData);
return File(contents, "image/png");
}
Edit:
1) PD имеет тип PictureModel
var PD = db.Picture.FromSql ("SIP_API_MONDIA_ItemPicture_sel
@PictureCode ", параметры) .ToList ();
Изображение модели:
public class PictureModel
{
[Key]
public byte[] PictureData { get; set; }
}
Ошибка:
Edit2: Пример хранимой процедуры:
GO
ALTER Procedure [dbo].[SIP_API_MONDIA_ItemPicture_sel]
(
@PictureCode int = null
)
As
Begin
If @PictureCode is not null
Begin
Select t1.PictureData From T_Picture t1 Where t1.PictureCode = @PictureCode
End
return 0
End
Где PictureData - тип varbinary (max) в T_Picture
Edit3: Промежуточное программное обеспечение, где происходит ошибка (см. Экран печати):
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// Add middleware before MVC
app.Use(async (ctx, next) =>
{
// Capture the original response body stream
var responseStream = ctx.Response.Body;
// Replace it with our own, so that we can read it
using (var bodyStream = new MemoryStream())
{
ctx.Response.Body = bodyStream;
//if (ctx.Request.Path.Value.Contains("customers") && !ctx.Request.QueryString.Value.Contains("?$expand"))
//{
// ctx.Response.Redirect($"" + ctx.Request.Path.Value + "?$expand=FreeFields,Contact,Address");
//}
// Run ASP.NET MVC (ie. get the results back from your code)
await next();
// Put the original response body stream back
ctx.Response.Body = responseStream;
// Read the one that we captured
bodyStream.Seek(0, SeekOrigin.Begin);
var responseBody = await new StreamReader(bodyStream).ReadToEndAsync();
// If it's ODATA & JSON & 200 (success), replace the "value" with "results"
if (ctx.Response.ContentType.Contains("application/json") && ctx.Response.ContentType.Contains("odata") && ctx.Response.StatusCode == 200)
{
responseBody = responseBody.Replace("\"value\"", "\"results\"");
}
// Write back the response body (whether modified or not) to the original response stream
await ctx.Response.WriteAsync(responseBody);
}
});
app.UseMvc(b =>
{
b.Select().Expand().Filter().OrderBy().MaxTop(100).Count();
b.MapODataServiceRoute("odata", "odata", GetEdmModel());
});
}