// Pure JavaScript errors handler window.addEventListener('error', function (err) { var lineAndColumnInfo = err.colno ? ' line:' + err.lineno +', column:'+ err.colno : ' line:' + e.lineno; _gaq.push([ '_trackEvent', 'JavaScript Error', err.message, err.filename + lineAndColumnInfo + ' -> ' + navigator.userAgent, 0, true ]); });
با سلام. هنگام اضافه کردن پراپرتی جدید(از نوع string و به نام SerialNumber) به موجودیت User سفارشی سازی شده شما با ارور زیر در هنگام اجرا مواجه شدم :
AggregateException: One or more errors occurred. (Invalid column name 'SerialNumber'.)
System.Threading.Tasks.Task<TResult>.GetResultCore(bool waitCompletionNotification)
من یک پیام خطا برای یکی از Propertyها تعیین کردم.وقتی میخوام به طریق زیر پیام رو دریافت کنم بازم همون خطای انگلیسی رو مشاهده میکنم!؟
catch (DbEntityValidationException validationException) { var errors = validationException.EntityValidationErrors.First(); foreach (var propertyError in errors.ValidationErrors) { Console.WriteLine(propertyError.PropertyName + "----" + propertyError.ErrorMessage); } }
نظرات مطالب
وادار کردن خود به کامنت نوشتن
بله؛ محترمانهتر هست! مثلا ReSharper هم محترمانه زیر این موارد خط میکشه (البته اگر تیک XML Documentation file خورده باشه).
اگر نیاز به برخورد خشنتری (!) داشتید روش Treat warnings as errors یک نوع وادار کردن هست، آن هم غیرمحترمانه چون برنامه دیگر کامپایل نخواهد شد و ... کار به بعد موکول نمیشه.
اگر نیاز به برخورد خشنتری (!) داشتید روش Treat warnings as errors یک نوع وادار کردن هست، آن هم غیرمحترمانه چون برنامه دیگر کامپایل نخواهد شد و ... کار به بعد موکول نمیشه.
در قسمت قبلی با تبهای فایرباگ آشنا شدیم . در این قسمت و قسمتهای بعدی ، با هر تب به صورت کامل آشنا خواهیم شد .
در این قسمت با تب Console آشنا خواهیم شد .
در قسمت قبل در مورد این تب گفتیم :
در این تب دو بخش وجود دارد :
در بخش Log هشدارها ، پیغامها ، درخواستهای XHR و ... نمایش داده میشوند .
بخش دیگر هم که در سمت راست قرار دارد ، مخصوص اجرای کدهای جاوا اسکریپت میباشد .
پس یک قسمت داریم برای نوشتن کدهای جاوا اسکریپت و یک قسمت هم برای مشاهدهی رویدادها .
اکنون 2 سوال مطرح میشود :
همین 2 سوال اهمیت و قدرت فایرباگ و قسمت Console آن را برای ما آشکار میکند ، زیرا ما میتوانیم بدون Reload کردن صفحه ، کدهایمان را اجرا و نتیجه را مشاهده کنیم یا بوسیله توابع موجود خیلی ساده کدهایمان را خطایابی کنیم .
چگونه کدهای نوشته شده را سریع اجرا کنم ؟ کلید میانبر ( HotKey ) اجرای کدها چیست ؟
پاسخ : فشردن کلید CTRL + Enter
امتحان کنید :
کد زیر را در بخش کدنویسی تایپ کنید و بوسیله کلید میانبر گفته شده ، آن را اجرا کنید .
تصویر ذیل نتیجه اجرای کدی هست که اجرا کردیم .
چند نکته :
دکمهها و حالتهای نمایش بخش کد نویسی
4 دکمه در قسمت کدنویسی وجود دارد :
بخش کد نویسی میتواند به 2 شکل نمایش داده شود :
9 دکمه هم در بالای بخش log وجود دارد ( به ترتیب از چپ به راست ) :
نمایش تعداد خطاهای اتفاق افتاده ، در نوار وضعیت ( Status Bar ) :
اگر در زمان فعال بودن فایرباگ ، در صفحه خطایی رخ دهد ، در نوار وضعیت عدد 1 را نمایش میدهد و به ازای هر خطای جدید ، یکی به تعداد خطاها اضافه میکند .
البته اگر از ورژنهای جدید فایرفاکس استفاده میکنید ، نوار وضعیت را نخواهید داشت و تعداد خطاها را در کنار آیکون فایرباگ خواهید داشت .
در کنار همه این امکانات ، فایرباگ یک مجموعه کامل از توابع کاربردی برای توسعه جاوا اسکریپت و خطایابی جاوا اسکریپت در اختیار ما میگذارد .
چند متد کمکی برای نوشتن Logهای مختلف در Console :
در قسمت بعدی توابع مربوط به توسعه جاوا اسکریپت ( Command Line API & Console API ) در فایرباگ را بررسی خواهیم کرد .
در این قسمت با تب Console آشنا خواهیم شد .
در قسمت قبل در مورد این تب گفتیم :
در این تب دو بخش وجود دارد :
در بخش Log هشدارها ، پیغامها ، درخواستهای XHR و ... نمایش داده میشوند .
بخش دیگر هم که در سمت راست قرار دارد ، مخصوص اجرای کدهای جاوا اسکریپت میباشد .
پس یک قسمت داریم برای نوشتن کدهای جاوا اسکریپت و یک قسمت هم برای مشاهدهی رویدادها .
اکنون 2 سوال مطرح میشود :
- برای اجرای یک کد در حالت معمول چگونه عمل میکنیم ؟
پاسخ : کدهای مورد نظر را بین تگ باز و بستهی script قرار میدهیم و صفحه مورد نظر را در مرورگر باز میکنیم و مرورگر کد را اجرا میکند . - در صورتی که کدهای ما خطا داشته باشند ، چگونه خطایابی میکنیم ؟
پاسخ : در بین کدهای نوشته شده چند alert قرار میدهیم و سعی میکنیم مشکل را پیدا کنیم .
همین 2 سوال اهمیت و قدرت فایرباگ و قسمت Console آن را برای ما آشکار میکند ، زیرا ما میتوانیم بدون Reload کردن صفحه ، کدهایمان را اجرا و نتیجه را مشاهده کنیم یا بوسیله توابع موجود خیلی ساده کدهایمان را خطایابی کنیم .
چگونه کدهای نوشته شده را سریع اجرا کنم ؟ کلید میانبر ( HotKey ) اجرای کدها چیست ؟
پاسخ : فشردن کلید CTRL + Enter
امتحان کنید :
کد زیر را در بخش کدنویسی تایپ کنید و بوسیله کلید میانبر گفته شده ، آن را اجرا کنید .
document.getElementsByTagName("div");
تصویر ذیل نتیجه اجرای کدی هست که اجرا کردیم .
چند نکته :
- قسمت هایی که با رنگ قرمز و یک دات ( . ) بعد از نام تگ قرار گرفته اند ، کلاسهای CSS ای هستند که المنت دارد .
- قسمت هایی که با رنگ آبی تیره و یک شارپ ( # ) بعد از نام تگ قرار گرفته اند ، ID تگها هستند .
- قسمت هایی که کمرنگ هستند ، المنت هایی هستند که در صفحه قابل نمایش نیستند .
- اگر یک تگ چند کلاس داشته باشد ، فقط اولین کلاس نمایش داده میشود .
دکمهها و حالتهای نمایش بخش کد نویسی
4 دکمه در قسمت کدنویسی وجود دارد :
- Run : اجرای کد
- Clear : خالی کردن بخش کد نویسی
- Copy : کپی کردن کد موجود در بخش کد نویسی در حافظه
- History : کدهای نوشته شده در نشست ( Session ) فعلی مرورگر
بخش کد نویسی میتواند به 2 شکل نمایش داده شود :
- بصورت جعبه چند خطی ( Command Editor )
- بصورت تک خطی ( Command Line )
9 دکمه هم در بالای بخش log وجود دارد ( به ترتیب از چپ به راست ) :
- دکمه ای با عنوان “Break On All Errors” . زمانی فعال شود ، در اولین اجرای یک کد از داخل صفحه ، به تب Script منتقل میشود و در خطی که کد در حال اجرا است توقف میکند .
- Clear : بخش log را خالی میکند .
- Persist : فعال بودن این دکمه باعث میشود که محتویات بخش Console در بارگزاری مجدد صفحه حفظ شود .
- Profile : بوسیله این گزینه میتوانید کدهای اجرایی خود در مدت زمان فعال بودن این دکمه ، تحت نظر بگیرید .
به این صورت که پس از غیر فعال کردن این دکمه ( کلیک مجدد بروی آن ) میتوانید تابعهای اجرا شده ، تعداد فراخوانی آنها ، مدت زمان اجرای هر یک ، میانگین زمان اجرای هر بار یک تابع و ... را مشاهده کنید . - 5 دکمهی بعدی هم برای فیلتر کردن Log هستند .
نمایش تعداد خطاهای اتفاق افتاده ، در نوار وضعیت ( Status Bar ) :
اگر در زمان فعال بودن فایرباگ ، در صفحه خطایی رخ دهد ، در نوار وضعیت عدد 1 را نمایش میدهد و به ازای هر خطای جدید ، یکی به تعداد خطاها اضافه میکند .
البته اگر از ورژنهای جدید فایرفاکس استفاده میکنید ، نوار وضعیت را نخواهید داشت و تعداد خطاها را در کنار آیکون فایرباگ خواهید داشت .
در کنار همه این امکانات ، فایرباگ یک مجموعه کامل از توابع کاربردی برای توسعه جاوا اسکریپت و خطایابی جاوا اسکریپت در اختیار ما میگذارد .
چند متد کمکی برای نوشتن Logهای مختلف در Console :
console.debug('This is a Debug message'); console.info('This is an Information'); console.warn('This is a Warning message'); console.error('This is an Error message');
در قسمت بعدی توابع مربوط به توسعه جاوا اسکریپت ( Command Line API & Console API ) در فایرباگ را بررسی خواهیم کرد .
هنگام نمایش اطلاعات در وب باید اطلاعات خام دریافتی از کاربر را encode کرده و سپس نمایش داد تا از حملات XSS یا cross site scripting attacks در امان ماند. مثلا وبلاگی را طراحی کردهاید و یک نفر اطلاعات زیر را بجای توضیحات ارسال کرده است:
<SCRIPT>alert('XSS')</SCRIPT>
مایکروسافت برای این منظور Microsoft Anti-Cross Site Scripting Library را ارائه داده است. نمونه بهبود یافته HttpUtility.HtmlEncode که در فضای نام System.Web موجود است.
در اینجا قصد داریم این کتابخانه را با لیست زیر آزمایش کنیم:
http://ha.ckers.org/xss.html
در همان صفحه اگر دقت کنید، لیست حملات را به صورت یک فایل xml هم ارائه داده است:
http://ha.ckers.org/xssAttacks.xml
برای خواندن این فایل xml در دات نت روشهای زیادی وجود دارد منجمله XML serialization .
ساختار این فایل به شکل زیر است:
<?xml version="1.0" encoding="UTF-8"?>
<xss>
<attack>
<name>x1</name>
<code>x2</code>
<desc>x3</desc>
<label>x4</label>
<browser>x5</browser>
</attack>
.
.
.
public class attack{
public string name { get; set; }
public string code { get; set; }
public string desc { get; set; }
public string label { get; set; }
public string browser { get; set; }
}
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
public static List<attack> DeserializeFromXML(string path)
{
XmlRootAttribute root = new XmlRootAttribute("xss");
XmlSerializer deserializer =
new XmlSerializer(typeof (List<attack>),root);
using (TextReader textReader = new StreamReader(path))
{
return (List<attack>)deserializer.Deserialize(textReader);
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Microsoft.Security.Application;
private static void testMethod()
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat("<html>{0}", Environment.NewLine);
sb.AppendFormat("<body>{0}", Environment.NewLine);
List<attack> data = XMLParser.DeserializeFromXML("xssAttacks.xml");
foreach (attack atk in data)
{
string cleanSafeHtmlInput = AntiXss.HtmlEncode(atk.code);
sb.AppendFormat("{0}<br>{1}", cleanSafeHtmlInput, Environment.NewLine);
}
sb.AppendFormat("</body>{0}", Environment.NewLine);
sb.AppendFormat("</html>");
File.WriteAllText("out.htm", sb.ToString());
}
بازخوردهای دوره
انتقال خودکار Data Annotations از مدلها به ViewModelهای ASP.NET MVC به کمک AutoMapper
آیا UserModel صرفا نقش Domain Class را در این مقاله دارد؟ اگر بله پس چه لزومی دارد متن دقیق اعتبار سنجی در این Model ذکر شود؟
اشتراکها