نحوه ساخت Captcha برای سایت
وقتی که سایتی بر روی اینترنت بارگذاری می شود و دارای صفحه ی ورود کاربران به سامانه می باشد باید هنگام ورود به سامانه از Captcha استفاده شود تا از هک کردن سایت توسط روبات ها جلوگیری شود.
ساخت کپچا خیلی ساده است فقط کافی است طبق روش زیر عمل شود.
ابتدا در صفحه ی html کدهای زیر را قرار می دهیم.
تسکت باکسی که می خواهیم کد های آن بررسی شود
<asp:TextBox ID="txtCaptcha" runat="server" Width="200px"></asp:TextBox>
بعد تصویر نمایش کپچا را در زیر قرار می دهیم.
<table>
<tr>
<td style="height: 50px; width:100px;">
<asp:Image ID="imgCaptcha" runat="server" />
</td>
<td valign="middle">
<asp:Button ID="btnRefresh" runat="server" Text="Refresh" OnClick="btnRefresh_Click" />
</td>
</tr>
</table>
حال یک صفحه ی نمایش عکس بصورت زیر اضافه می کنیم. و در بخش کدهای سمت سی شارپ کدهای زیر را قرار می دهیم.
public partial class GenerateCaptcha : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Clear();
int height = 40;
int width = 130;
Bitmap bmp = new Bitmap(width, height);
RectangleF rectf = new RectangleF(10, 5, 0, 0);
Graphics objGraphics = Graphics.FromImage(bmp);
Color objcolor = Color.FromArgb(250,182,239, 147);
objcolor.GetHue();
objGraphics.Clear(objcolor);
objGraphics.SmoothingMode = SmoothingMode.AntiAlias;
objGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
objGraphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
string objtext = Session["captcha"].ToString();
string objnewText = "";
for (int i = 0; i < objtext.Length; i++)
{
objnewText += objtext.Substring(i,1);
objnewText += " ";
}
objGraphics.DrawString(objnewText, new Font("Thaoma", 16, FontStyle.Strikeout), Brushes.Gray, rectf);
objGraphics.DrawRectangle(new Pen(Color.Gold), 1, 1, width - 2, height - 2);
objGraphics.Flush();
Response.ContentType = "image/jpeg";
bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
objGraphics.Dispose();
bmp.Dispose();
}
}
حال در صفحه ای که می خواهیم کپچا ها را بررسی کنیم بصورت زیر عمل می کنیم.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FillCapctha();
}
}
void FillCapctha()
{
try
{
Random random = new Random();
string combination = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
StringBuilder captcha = new StringBuilder();
for (int i = 0; i < 6; i++)
captcha.Append(combination[random.Next(combination.Length)]);
Session["captcha"] = captcha.ToString();
imgCaptcha.ImageUrl = "GenerateCaptcha.aspx?" + DateTime.Now.Ticks.ToString();
//HandlerTest.ashx
//imgCaptcha.ImageUrl = "HandlerTest.ashx?" + DateTime.Now.Ticks.ToString();
}
catch
{
throw;
}
}
protected void btnRefresh_Click(object sender, EventArgs e)
{
FillCapctha();
}
protected void btnRegister_Click(object sender, EventArgs e)
{
if (Session["captcha"].ToString().ToLower() != txtCaptcha.Text.Trim().ToLower())
Response.Write("Invalid Captcha Code");
else
Response.Write("Valid Captcha Code");
FillCapctha();
}
}
نحوه صدا زدن وب سرویس هایی با وردی و خروجی JSON
برای صدا زدن وب سرویس های Json در محیط کد نویسی #C با روش زیر عمل می کنیم.
var webAddr = "http://localhost:28327/IVR/IVRService.svc/CookiePursuitService/xxxx";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
httpWebRequest.ContentType = "application/json; charset=utf-8";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{\"Key\":\"50xxxxx\",\"TrackingNo\":\"94xxxxx\"}";
streamWriter.Write(json);
streamWriter.Flush();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
با استفاده از کدهای بالا این امکان را فراهم کردیم که بتوان خروجی JSON را دریافت کرد.
نحوه ساخت جدول Table داینامیک در #C
ابتدا در بخش Html کد زیر را قرار می دهیم/
<asp:PlaceHolder ID="Place" runat="server"></asp:PlaceHolder>
سپس در بخش کد نویسی سی شارپ کد زیر را قرار می دهیم
HtmlTable table = new HtmlTable();
table.Border = 1;
table.CellPadding = 3;
table.Width = "100%";
// Populate the HtmlTable control by adding rows to it.
for (int rowcount = 0; rowcount < objobjCookiefieldList.Count(); rowcount++)
{
// Create a new HtmlTableRow control.
HtmlTableRow row = new HtmlTableRow();
// Add cells to the HtmlTableRow control.
for (int cellcount = 0; cellcount < 2; cellcount++)
{
// Define a new HtmlTableCell control.
HtmlTableCell cell;
// Create table header cells for the first row.
if (rowcount <= 0)
{
cell = new HtmlTableCell("th");
}
else
{
cell = new HtmlTableCell();
}
// Create the text for the cell.
if (cellcount==0)
{
cell.Controls.Add(new LiteralControl(objobjCookiefieldList[rowcount].CookieFieldName));
}
else
{
cell.Controls.Add(new LiteralControl(objobjCookiefieldList[rowcount].CookieFieldValue));
}
// Add the cell to the HtmlTableRow Cells collection.
row.Cells.Add(cell);
}
// Add the row to the HtmlTable Rows collection.
table.Rows.Add(row);
}
// Add the control to the Controls collection of the
// PlaceHolder control.
Place.Controls.Clear();
Place.Controls.Add(table);
نحوه افزودن یک برنامه تحت ویندوز به بخش SysTry
در این مثال ما یک برنامه تحت ویندوز با استفاده از زبان برنامه نویسی #C نوشته ایم و قصد داریم هرگاه بروی دکمه Minimize کلیک کردیم برنامه به بخش Systry اجرا شود و با دابل کلیک بر روی آن برنامه دوباره نمایش داده شود.
کد های مربوط به این کار بصورت زیر می باشد.
private void IntervalEarthquake_Resize(object sender, EventArgs e)
{
mynotifyicon.BalloonTipTitle = "برنامه تست";
mynotifyicon.BalloonTipText = "جهت تست این برنامه استفاده می شود";
if (FormWindowState.Minimized == this.WindowState)
{
mynotifyicon.Visible = true;
mynotifyicon.ShowBalloonTip(500);
this.Hide();
}
else if (FormWindowState.Normal == this.WindowState)
{
mynotifyicon.Visible = false;
}
}
private void mynotifyicon_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.Show();
this.WindowState = FormWindowState.Normal;
}
نحوه ی اجرای یک برنامه ی تحت ویندوز با #C هنگام روشن کردن کامپیوتر
در این مثال ما یک برنامه با ویژوال استدیو طراحی کردیم و قصد دراریم هر بار که ویندوز بالا می اید یا به اصطلاح کامپیوتر را روشن می کنیم این برنامه اجرا شود. ما این برنامه را با استفاده از زبان برنامه نویسی #C نوشته ایم. و در بخش Load صفحه این کد را قرار می دهیم.
//StartUp Windows -- شروع برنامه هنگام راه اندازی ویندوز
RegistryKey add = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
add.SetValue("Your App Name", "\"" + Application.ExecutablePath.ToString() + "\"");
نحوه ساخت فایل زیپ در #C
در این مثال ما یک فایل تکستی داریم که آن را به فایل JSON تبدیل کرده ایم و بعد یه مجموعه عکس را از دیتابیس که فایل های آن بصورت باینری است را خوانده ایم و آن را به یک فایل زیپ تبدیل کرده ایم.و نهایتن آن را در مرورگر قابل دانلود کرده ایم
و همچنین امکان ذخیره آن نیز وجود دارد.
private void CreateZipFiles(string alljson)
{
int RegionId = Convert.ToInt32(drpRegionId.SelectedValue);
byte[] jsondata = GetBytes(alljson);
string jsonName = string.Format(RegionId.ToString() + ".json");
string zipName = string.Format(RegionId.ToString() + ".zip");
using (DAL.DataClassesDataContext Context = new DAL.DataClassesDataContext())
{
using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile())
{
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.Level5;
var ItemAtachment = Context.ItemAttachment_FCH(null, null, RegionId).ToList();
int countid = 1;
int tempItemId = 0;
foreach (var item in ItemAtachment)
{
if (item.ItemAttachmentTypeid == 1)
{
try
{
//صاحب پروانه
Byte[] ItemImage = (Byte[])item.ItemAttachmentContent.ToArray();
jsonName = item.ItemId + "-" + "main" + ".jpg";
zip.AddEntry(jsonName, ItemImage);
}
catch
{
}
}
else if (item.ItemAttachmentTypeid == 2)
{
//سر در مشاور املاک
if (tempItemId != item.ItemId)
{
countid = 1;
}
Byte[] ItemImage = (Byte[])item.ItemAttachmentContent.ToArray();
jsonName = item.ItemId + "-" + "sub" + "-" + countid + ".jpg";
zip.AddEntry(jsonName, ItemImage);
tempItemId = item.ItemId;
countid++;
}
}
jsonName = string.Format(RegionId.ToString() + ".json");
zip.AddEntry(jsonName, jsondata);
//zip.Save(Server.MapPath(zipName));
Response.Clear();
Response.BufferOutput = false;
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "attachment; filename=" + zipName);
zip.Save(Response.OutputStream);
Response.End();
}
}
}
// تبدیل فایل متنی به بایت
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
نحوه ارسال دو پارامتر به تابع با در WCF
کدها زیر را در سرویس مورد نظر می نویسیم
[OperationContract]
[WebInvoke(UriTemplate = "Invoice", RequestFormat = WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, Method = "POST")]
OutputResultStruct<KeyValuePair<string, int>> AddToInvoice(Invoice invoice, List< InvoiceDetail> invoicedetail,int RequestId);
کلاسی که برای این کار نوشتیم تا بتواند هر ساختاری را قبول کند
public class OutputResultStruct<T> where T : struct
{
public bool IsValidResult { get; set; }
public int ErrorCode { get; set; }
public string Description { get; set; }
private List<T> _resultvalue;
public List<T> resultvalue
{
get
{
return (List<T>)_resultvalue;
}
set
{
_resultvalue = value;
}
}
}
و مقدار زیر را هم در Web Config قرار می دهیم تا در هنگام آدرس دهی مشکلی نداشته باشیم
<system.serviceModel>
<services>
<endpoint address="InvoiceService" binding="webHttpBinding" contract="HamrahMelk.IInvoiceService"
behaviorConfiguration="MyEndpointBehavior" name="InvoiceService" > </endpoint>
</services>
</system.serviceModel>
حال متدی که در فایل SVC می نویسیم به شکل زیر خواهد بود.
public OutputResultStruct<KeyValuePair<string, int>> AddToInvoice(Invoice invoice, List<InvoiceDetail> invoicedetail, int RequestId)
{
var OBJresult = new OutputResultStruct<KeyValuePair<string, int>>();
try
{
using (DataClassesDataContext Context = new DataClassesDataContext())
{
Invoice obj = new Invoice();
obj.UserId = invoice.UserId;
obj.RequestId = RequestId;
Context.Invoices.InsertOnSubmit(obj);
Context.SubmitChanges();
var Resultinvoicedetail = AddToInvoiceDetail(invoicedetail, obj.InvoiceId);
if (Resultinvoicedetail.IsValidResult==false)
{
Invoice ObjInvoiceDelete = Context.Invoices.Single(q => q.InvoiceId == obj.InvoiceId);
Context.Invoices.DeleteOnSubmit(ObjInvoiceDelete);
Context.SubmitChanges();
OBJresult.ErrorCode = Resultinvoicedetail.ErrorCode;
OBJresult.Description = Resultinvoicedetail.Description;
OBJresult.IsValidResult = false;
OBJresult.resultvalue = new List<KeyValuePair<string, int>>() ;
}
else
{
OBJresult.ErrorCode = Resultinvoicedetail.ErrorCode;
OBJresult.Description = Resultinvoicedetail.Description;
OBJresult.IsValidResult = true;
OBJresult.resultvalue = new List<KeyValuePair<string, int>>() { new KeyValuePair<string, int>("InsertId", obj.InvoiceId) };
}
}
}
catch (Exception ex)
{
OBJresult.ErrorCode = 2;
OBJresult.Description = ex.Message;
OBJresult.IsValidResult = false;
OBJresult.resultvalue = new List<KeyValuePair<string, int>>();
}
return OBJresult;
}
نحوه کار با فایل XML در #C
فایل XML
<?xml version="1.0" encoding="utf-8" ?>
<items>
<item>
<Key>123</Key>
</item>
<item>
<Key>451</Key>
</item>
</items>
حال در سی شارپ اینطوری صداش می زنیم و از آن استفاده می کنیم.
XmlNode xmlNode;
XmlDocument xmlDoc = new XmlDocument();
String htmlCode = string.Empty;
WebClient htmlDoc = new WebClient();
string AddresXml = HttpContext.Current.Server.MapPath(@"\App_Data\APIKeys.xml");
htmlCode = htmlDoc.DownloadString(AddresXml);
//htmlCode = htmlCode.Substring(htmlCode.IndexOf("<table class=\"comodities\" style=\"margin-top:4px;\">"), htmlCode.IndexOf("</table></center><br>") - htmlCode.IndexOf("<table class=\"comodities\" style=\"margin-top:4px;\">") + 8);
htmlCode = htmlCode.Replace("'", "\"");
htmlCode = htmlCode.Replace("</a>", "");
xmlDoc.LoadXml(htmlCode);
for (int i = 0; i < xmlDoc.ChildNodes.Count; i++)
{
if (xmlDoc.ChildNodes[i].Name == "items")
{
for (int j = 0; j < xmlDoc.ChildNodes[i].ChildNodes.Count; j++)
{
if (xmlDoc.ChildNodes[i].ChildNodes[j].Name == "item")
{
key = Convert.ToString(xmlDoc.ChildNodes[i].ChildNodes[j].ChildNodes[0].InnerText);
Guid.TryParse(key, out apiKey);
OBJGuid.Add(apiKey);
}
}
}
}
نحوه ایجاد Inner join با استفاده از دستورات لینکیو در سی شارپ
from t1 in db.Table1
join t2 in db.Table2 on t1.field equals t2.field
select new { t1.field2, t2.field3}
چگونه حجم عکس را در#C پایین بیاوریم
گاهی وقتا لازم است که عکس هایی را که کاربر وارد سیستم می کند را کنترل کنیم و حجم آن را پایین بیاوریم و در دیتابیس ذخیره کنیم تا فضای کمتری را به خود اختصاص دهد ما در این بخش قصد داریم که این کار را انجام دهیم و حجم عکس را با استفاده از یه روش خاصی پایین بیاوریم و در دیتابیس ذخیره کنیم.
برای این کار باید از فرمول زیر استفاده کنیم و در نهایت با استفاده از ابزار های موجود در دات نت این فرمول را پیاده کنیم.
عدد مورد نظر را بر سایز عکس تقسیم می کنیم و نهایتن رادیکال آن را بدست می آوریم. و مقدار بدست آمده را در طول و عرض عکس مورد نظر ضرب می کنیم و کد آن هم بصورت زیر می باشد.
البته قبل از کار کردن باید یک رفرنس به نام System.web.Helpers را اضافه کنیم
در این مثال قصد داریم یک عکس از کاربر دریافت کنیم و نهایتن ججم آن عکس را به 50 کیلو بایت برسانیم
using System.Web.UI.WebControls;
double AttachmentTypeMaxSize = 1024;
double Length = FileUploadSendFile.PostedFile.ContentLength;
double UserInsert =50* 1024;
double sizeimage = Math.Sqrt((UserInsert / Length));
Byte[] FileUplodData = (Byte[])FileUploadSendFile.FileBytes;
if (Length >= UserInsert)
{
System.Drawing.Image imgFile = System.Drawing.Image.FromStream(FileUploadSendFile.PostedFile.InputStream);
double ImageWith = imgFile.PhysicalDimension.Width * sizeimage;
double ImageHeight = imgFile.PhysicalDimension.Height * sizeimage;
var webImage = new System.Web.Helpers.WebImage(FileUploadSendFile.FileBytes);
webImage.Resize(Convert.ToInt32(ImageWith),Convert.ToInt32(ImageHeight), false, true);
//webImage.Save(AppDomain.CurrentDomain.BaseDirectory, "jpg", true);
FileUplodData= webImage.GetBytes();
}