API возврат изображения - PullRequest
       73

API возврат изображения

1 голос
/ 25 апреля 2019

Я пытаюсь получить байтовый массив из базы данных и вернуть его в виде изображения, например 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; }
}

Ошибка: enter image description here

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());
        });
    }
...