Javascript 使用Ajax从C#检索二进制数据

Javascript 使用Ajax从C#检索二进制数据,javascript,c#,jquery,Javascript,C#,Jquery,我在网络开发方面有点新手,我无法实现我想要做的事情 我有一个数据库,其中有一个名为“PI_Banners”的表,我在其中存储了一些图像。此表存储一个ID和一个VARBINARY列,其中包含图像的二进制数据 我要做的是,通过对C#函数的Ajax请求检索数据,并使用数据URI方案创建一个“img”标记。然后将新图像附加到div 这就是我得到的: Ajax调用: $(document).ready(function() { var dto = {}; var dtoJSON = JS

我在网络开发方面有点新手,我无法实现我想要做的事情

我有一个数据库,其中有一个名为“PI_Banners”的表,我在其中存储了一些图像。此表存储一个ID和一个VARBINARY列,其中包含图像的二进制数据

我要做的是,通过对C#函数的Ajax请求检索数据,并使用数据URI方案创建一个“img”标记。然后将新图像附加到div

这就是我得到的:

Ajax调用:

$(document).ready(function() {

    var dto = {};
    var dtoJSON = JSON.stringify(dto);

    $.ajax({
        async: false,
        url: 'BannerRotativo.aspx/devuelveBanners',
        cache: false,
        dataType: 'json',
        type: "POST",
        data: dtoJSON,
        contentType: "application/json; charset=utf-8",
        success: function(data, textStatus, jqXHR) {
            responsedevuelveBanners(data);
        },
        error: errorResponse
        });
});
public static string devuelveBanners()
{
    DataReader DR;
    DR = listaBanners();
    //armaJson creates the Json string from the DataReader.
    string strJson = GENERAL.armaJson(DR);
    return strJson;
}


public DataReader listaBanners()
    {
        try
        {
            string strComando;
            sqlCommand SQLC;
            DataReader DR;

            strComando = "SELECT banner_img FROM PI_Banners";
            //sqlCon is the connection, and is open already.
            SQLC = new System.Data.SqlClient.SqlCommand(strComando, sqlCon);
            SQLC.CommandType = CommandType.Text;
            DR = SQLC.ExecuteReader();

            return DR;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
作为“devuelvebaners”的C#函数

C#代码:

$(document).ready(function() {

    var dto = {};
    var dtoJSON = JSON.stringify(dto);

    $.ajax({
        async: false,
        url: 'BannerRotativo.aspx/devuelveBanners',
        cache: false,
        dataType: 'json',
        type: "POST",
        data: dtoJSON,
        contentType: "application/json; charset=utf-8",
        success: function(data, textStatus, jqXHR) {
            responsedevuelveBanners(data);
        },
        error: errorResponse
        });
});
public static string devuelveBanners()
{
    DataReader DR;
    DR = listaBanners();
    //armaJson creates the Json string from the DataReader.
    string strJson = GENERAL.armaJson(DR);
    return strJson;
}


public DataReader listaBanners()
    {
        try
        {
            string strComando;
            sqlCommand SQLC;
            DataReader DR;

            strComando = "SELECT banner_img FROM PI_Banners";
            //sqlCon is the connection, and is open already.
            SQLC = new System.Data.SqlClient.SqlCommand(strComando, sqlCon);
            SQLC.CommandType = CommandType.Text;
            DR = SQLC.ExecuteReader();

            return DR;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
当我重新解析Json字符串并创建图像时:

function responsedevuelveBanners(data)
    {
        var datos = JSON.parse(data.d);
        $("#imgContainer").append("<img src='data:image/jpg;base64," + datos.Rows[0].Row[0].banner_img + "' />");
    }
我知道我用这种方式检索json数据时犯了严重错误,但我不知道如何实现这一点


提前谢谢

为了使用
base64
部分是因为您需要返回
base64
字符串,而不是字节数组,因此您需要使用:
convert.tobase64字符串(缓冲区)

因此,以您的代码为例:

ImageConverter imageConverter = new ImageConverter();
byte[] resourceByteArray = (byte[])imageConverter.ConvertTo(_YourObj.GetImage(), typeof(byte[]));
您的WebApi方法应返回:

return Convert.ToBase64String(resourceByteArray);

您需要以
Convert.ToBase64String(图像字节)
(即字符串)的形式返回图像数据。如果我已经有了字节数组,该怎么办?我只是跳过imageConverter步骤,然后将其转换为Base64?谢谢答案是肯定的,您只需跳到
Convert.tobase64字符串(resourceByteArray)答案的一部分。