asp.net ashx demande 404

J’utilise un gestionnaire de demandes ashx pour récupérer des images et mon point d’arrêt dans le fichier ashx n’est pas touché. Lorsque j’utilise firebug, je vois que la requête renvoie un 404, ce qui me laisse penser que je dois configurer certains parameters de manière à ce que le fichier ashx puisse être trouvé.

J’utilise Visual Studio 2008 et .net 3.5.

Fichier ASHX

namespace hybrid.content.Handlers { public class DB_Images : IHttpHandler { public void ProcessRequest(HttpContext context) { Int32 image_id; if (context.Request.QuerySsortingng["id"] != null) image_id = Convert.ToInt32(context.Request.QuerySsortingng["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) { SqlConnectionSsortingngBuilder connstr = new SqlConnectionSsortingngBuilder(); //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.ConnectionSsortingng); 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; } } } } 

Événement de clic de page

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

ashx html

  

Il n’y a pas de code HTML en dehors de cette référence.

Y a-t-il quelque chose qui me manque pour que cela fonctionne?

Dans mon cas, le fichier ashx était marqué comme type de contenu Aucun au lieu de contenu, c’est-à-dire que l’ action de construction -> Actions de construction aurait dû être Content , ce qui signifie que le fichier ashx n’était pas inclus lors de la publication du site.

Si vous utilisez des gestionnaires génériques dans ASP.NET, vous devez vérifier certaines choses.

1.) Assurez-vous que vous avez défini l’indicateur “Application 32 bits” dans votre pool d’applications sur 32 bits s’il s’agit bien de 32 bits. Le défaut est faux”.

2.) Basculez le pool d’applications d’Integrated en Classic

3.) Modifiez la version .NET dans votre pool d’applications de manière appropriée. Dans votre cas, utilisez v2, car 3.5 utilise la version 2. .NET 4.0 utilise .NET 4.0.

4.) Assurez-vous que ASP.NET est enregistré. Exécuter tout dans les blocs de code.

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

5.) Choisissez “Ressortingctions ISAPI et CGI” après un clic droit sur le nom du serveur (pas le nom du site) dans le Gestionnaire IIS, puis cliquez avec le bouton droit sur la ligne “ASP.NET {version}” appropriée et choisissez “Autoriser”.

6.) Assurez-vous que vos mappages de gestionnaire (pour * .ashx) sont activés (c.-à-d. “Activés”) au niveau du serveur, du site ou explicitement dans le fichier web.config.

Je pense que le problème est dans l’URL. ~/ signifie votre répertoire racine.

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

Pour obtenir des détails sur cette erreur, vérifiez le source de l’image, copiez-le et collez-le dans la barre d’adresse. Une page jaune contenant les détails apparaîtra.

Je pense que le seul problème est l’URL.