asp.net ashx запрос 404 - PullRequest
       21

asp.net ashx запрос 404

5 голосов
/ 18 января 2012

Я использую обработчик запросов ashx для получения изображений, и моя точка останова в файле ashx не была достигнута. Когда я использую firebug, я вижу, что запрос возвращает 404, что заставляет меня думать, что мне нужно настроить некоторые параметры, чтобы найти файл ashx.

Я использую Visual Studio 2008 и .net 3.5.

ASHX file

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, кроме этой ссылки.

Есть что-то, чего мне не хватает, чтобы заставить это работать?

Ответы [ 3 ]

2 голосов
/ 19 ноября 2013

В моем случае файл ashx был помечен как тип содержимого None, а не как Content, т. Е. Свойства -> Действие построения , для него должно было быть Content , что означаетчто файл Ashx не был включен при публикации сайта.

2 голосов
/ 30 июля 2013

Если вы используете универсальные обработчики в ASP.NET, есть несколько вещей, которые нужно проверить.

1.) Убедитесь, что вы установили флаг «32-битное приложение» в пуле приложений на 32 бита, если он действительно 32-битный. По умолчанию установлено значение «Ложь».

2.) Превратить пул приложений из встроенного в классический

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 {версия}> aspnet_regiis.exe -i

5.) Выберите «Ограничения ISAPI & CGI» после щелчка правой кнопкой мыши по имени сервера (не имени сайта) в диспетчере IIS, правой кнопкой мыши щелкните правильную строку «ASP.NET {версия}» и выберите «Разрешить».

6.) Убедитесь, что у вас включены сопоставления обработчиков (для * .ashx) (также известные как «Включено») на уровне сервера, сайта или в явном виде в файле web.config.

0 голосов
/ 19 ноября 2013

Я думаю, что проблема в URL. ~/ означает ваш корневой каталог.

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

Чтобы получить подробную информацию об этой ошибке, проверьте источник изображения, скопируйте и вставьте его в адресную строку. Появится желтая страница, состоящая из деталей.

Я думаю, что единственная проблема - это URL.

...