webForumDet fria alternativet

problem med spamskydd

.NETur .NET

2 svar · 470 visningar · startad av Vinnaren

VinnarenMedlem sedan sep. 2005833 inlägg
Frågan#1

Ska försöka göra en UserControll som slumpar ut en säkerhetskod som en bild, men får det inte att fungera. Som koden är nu kommer det fram en ladda ner/öppna dialog. Har koden:

public partial class _Default : System.Web.UI.Page 
{
     protected void Page_Load(object sender, EventArgs e)       
     {
         // Ska ha 4 slumpade tecken
         string rnd = RndSecurity(4); 
         Session["security"] = rnd;   
         // Skapar bilden med de slumpade tecknen  
         SecurityImage(rnd);       
     }

    private void SecurityImage(string strSecurity)        
    {
        int intHeight = strSecurity.Length * 12;  

        // Storleken på bilden  
        Bitmap Img = new Bitmap(intHeight, 25);            
        Graphics g = Graphics.FromImage(Img);   
        
        // Grafiska inställningar
        g.Clear(Color.LightSteelBlue);            
        Font f = new Font("Arial", 12);          
        SolidBrush s = new SolidBrush(Color.RoyalBlue);

        g.DrawString(strSecurity, f, s, 3, 3);            
        MemoryStream ms = new MemoryStream();            
        Img.Save(ms, ImageFormat.Jpeg);            
        
        Response.ClearContent();            
        Response.ContentType = "images/jpg";          
        Response.AddHeader("Content-Disposition", "filename=VCode.jpg");            
        Response.BinaryWrite(ms.ToArray());            
        g.Dispose();            
        Img.Dispose();            
        Response.End();        
    }

    // Slumpar tal eller bokstäver
    private string RndSecurity(int number)       
    {        
        // Vad som kan slumpas
        string strSecurityLine = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";            
        string[] arrSecurity = strSecurityLine.Split(new Char[] { ',' });            
        string strRandom = "";            
        Random rand = new Random();

        // loopar så många gånger som anges i number
        for (int i = 1; i < number + 1; i++)            
        {                
            // Slumpar ett tal
            int t = rand.Next(34)+1;
            // Hämtar från arrayen o sparar i variabel
            strRandom += arrSecurity[t];            
        }
        return strRandom;        
    }

}

Hur gör jag för att visa bilden på sidan?

Tacksam för all hjälp :stud

JosefMedlem sedan mars 20023 561 inlägg
#2

Jag har gjort såhär:
Istället för

Response.BinaryWrite(ms.ToArray());

har jag istället:

[i]Bitmap[/i].Save(this.Response.OutputStream, ImageFormat.Jpeg);

(dvs din Img)

VinnarenMedlem sedan sep. 2005833 inlägg
#3

tack, men löste det genom att länka in aspx-sidan som en bild :)

144 ms totalt · 3 externa anrop · v20260731065814-full.58439ac5
136 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)