繁体   English   中英

asp.net ashx请求404

[英]asp.net ashx request 404

我正在使用ashx请求处理程序来检索图像,并且ashx文件中的断点未被命中。 当我使用firebug时,我可以看到请求返回404,这使我认为我需要配置一些设置,以便可以找到ashx文件。

我正在使用visual studio 2008和.net 3.5。

ASHX文件

namespace hybrid.content.Handlers
{
 public class DB_Images : IHttpHandler
 {
    public void ProcessRequest(HttpContext context)
    {
        Int32 image_id;
        if (context.Request.QueryString["id"] != null)
            image_id = Convert.ToInt32(context.Request.QueryString["id"]);
        else
            throw new ArgumentException("No parameter specified");

        context.Response.ContentType = "image/jpeg";
        Stream strm = GetImageFromDatabase(image_id);
        if (strm != null)
        {
            byte[] buffer = new byte[4096];
            int byteSeq = strm.Read(buffer, 0, 4096);

            while (byteSeq > 0)
            {
                context.Response.OutputStream.Write(buffer, 0, byteSeq);
                byteSeq = strm.Read(buffer, 0, 4096);
            }
            //context.Response.BinaryWrite(buffer);
        }
    }

    public Stream GetImageFromDatabase(int image_id)
    {
        SqlConnectionStringBuilder connstr = new SqlConnectionStringBuilder();
        //connstr.InitialCatalog = "dummy";
        //connstr.UserID = "sa";
        //connstr.Password = "password";
        //connstr.DataSource = "source";
        connstr.InitialCatalog = "smsdb";
        connstr.UserID = "user";
        connstr.Password = "password";
        connstr.DataSource = "10.31.4.79";

        SqlConnection conn = new SqlConnection(connstr.ConnectionString);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        //            cmd.CommandText = "select image from cis_images where image_id = @p_image_id";
        cmd.CommandText = "select image from test_images where image_id = @p_image_id";
        cmd.Parameters.AddWithValue("@p_image_id", image_id);
        conn.Open();
        object img = cmd.ExecuteScalar();
        try
        {
            return new MemoryStream((byte[])img);
        }
        catch
        {
            return null;
        }
        finally
        {
            conn.Close();
            conn.Dispose();
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
  }
}

页面点击事件

protected void Button1_Click(object sender, EventArgs e)
    {
        Image1.ImageUrl = "~/DB_Images.ashx?id=" + TextBox1.Text;
    }

ashx html

<%@ WebHandler Language="C#" CodeBehind="DB_Images.ashx.cs" Class="hybrid.content.Handlers.DB_Images" %>

除了该引用之外没有任何HTML。

有什么东西让我失去工作吗?

如果您在ASP.NET中使用Generic Handler,则需要检查一些事项。

1.)如果确实是32位,请确保已将应用程序池中的“32位应用程序”标志设置为32位。 默认值为“False”。

2.)将应用程序池从Integrated转为Classic

3.)适当更改应用程序池中的.NET版本。 在您的情况下,使用v2,因为3.5使用版本2..NET 4.0使用.NET 4.0。

4.)确保ASP.NET已注册。 运行代码块中的所有内容。

C:\\> cd C:\\Windows\\Microsoft.NET\\Framework64\\{version} C:\\ Windows \\ Microsoft.NET \\ Framework64 {version}> aspnet_regiis.exe -i

5.)在IIS管理器中右键单击服务器名称(而不是站点名称)后,选择“ISAPI和CGI限制”,然后右键单击正确的“ASP.NET {version}”行并选择“允许”。

6.)确保在服务器级别或站点级别或在web.config中明确启用了处理程序映射(用于* .ashx)(也称为“已启用”)。

在我的情况下,我将ashx文件标记为无内容类型而不是内容,即属性 - >它的构建操作应该是内容 ,这意味着在发布网站时不包括ashx文件。

我认为问题在于网址。 ~/表示您的根目录。

 Use ResolveClientUrl("yourPathHere") or  ResolveUrl("yourPathHere").

要获取有关此错误的详细信息,请检查图像的来源并将其复制并粘贴到地址栏中。 将弹出包含详细信息的黄页。

我认为唯一的问题是网址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM