نظرات مطالب
متدی برای بررسی صحت کد ملی وارد شده
با سلام
اینم واسه شناسه ملی اشخاص حقوقی منیع
public bool IsValidIranianLegalCode(string input)
        {
            //input has 11 digits that all of them are not equal
            if (!Regex.IsMatch(input, @"^(?!(\d)\1{10})\d{11}$"))
                return false;

            var check = Convert.ToInt32(input.Substring(10, 1));
            int dec = Convert.ToInt32(input.Substring(9, 1)) + 2;
            int[] Coef = new int[10] { 29, 27, 23, 19, 17, 29, 27, 23, 19, 17 };

            var sum = Enumerable.Range(0, 10)
                          .Select(x => (Convert.ToInt32(input.Substring(x, 1)) + dec) * Coef[x])
                          .Sum() % 11;

            return sum == check;
        }

نظرات مطالب
اعتبارسنجی در Entity framework Code first قسمت اول
ValidationHelper  مورد نیاز جهت کلاس DataErrorInfo    :
 public class ValidationHelper
    {
        public static IList<ValidationResult> GetErrors(object instance)
        {
            var res = new List<ValidationResult>();
            Validator.TryValidateObject(instance,
                new ValidationContext(instance, null, null), res, true);
            return res;
        }



        public static IList<ValidationResult> ValidateProperty(object value, string propertyName)
        {

            if (string.IsNullOrEmpty(propertyName))
                throw new ArgumentException("Invalid property name", propertyName);

            var propertyValue = value.GetType().GetProperty(propertyName).GetValue(value, null);

            var results = new List<ValidationResult>();
            var context = new ValidationContext(value, null, null) { MemberName = propertyName };
            Validator.TryValidateProperty(propertyValue, context, results);
            return results;
        }
    }


نظرات مطالب
ASP.NET MVC #18
ببخشید؛
با این تفاسیر متد IsUserInRole باید در داخل کلاس EfRole در لایه سرویس، پوشه EFServices به شکل زیر پیاده سازی بشه؟ یعنی میشه به طور مستقیم از شی context استفاده کرد؟
public class EfRole : EfGenericService<Role>, IRole
    {
        public EfRole(IUnitOfWork uow) : base(uow)
        {
        }

        public bool IsUserInRole(string username, string roleName)
        {
            using (var context = new PublishingContext())
            {
                var user = context.Users.Where(x => x.Username.Equals(username, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();

                var roles = from ur in user.Rolls
                            from r in context.Rolls
                            where ur.Id == r.Id
                            select r.Rol;
                if (user != null)
                    return roles.Any(x => x.Equals(roleName, StringComparison.CurrentCultureIgnoreCase));
                else
                    return false;
            }
        }
}
نظرات مطالب
EF Code First #7
با تشکر از پاسخ دهی شما به سوالات؛ موقع Create درست اعمال می‌شود، اما هنگام Edit جدول واسط به روز نمی‌گردد.
مثلا برای دو جدول Role , User که نقش‌های یک کاربر بوسیله یک string[] به اکشن Edit پاس داده شده
کد مربوطه به صورت زیر می‌باشد
[HttpPost]
        public ActionResult Edit(User user, string[] tags)
        {
            if (ModelState.IsValid)
            {
                List<Role> roles = new List<Role>();
                foreach (var item in tags)
                {
                    Role role = db.Roles.Find(long.Parse(item));
                    roles.Add(role);
                }
                user.Roles = roles;
                
                db.Entry(user).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(user);
        }
اما جدول واسط در این قسمت به روز نمی‌شود . متاسفانه چیز خاصی در این رابطه پیدا نکردم و مجددا مزاحم شما شدم .

با تشکر
پاسخ به بازخورد‌های پروژه‌ها
مشکل با نوشتن تابع تجمعی سفارشی(از طریق پیاده سازی IAggregateFunction)
با استفاده از یک فیلد محاسباتی خیلی ساده می‌توانید هر دو مورد را پیاده سازی کنید:
ابتدا قبل از شروع گزارش یک متغیر تعریف کنید:
 long lastBalance = 0;
بعد، از این متغیر که با هر بار فراخوانی callback رندر ردیف جاری به روز خواهد شد، در یک فیلد محاسباتی استفاده نمائید:
 column.CalculatedField(
                         list =>
                         {
                             if (list == null) return string.Empty;
                             var currentRowCredit = (long)list.GetValueOf<Payment>(x => x.Credit);
                             var currentRowDebit = (long)list.GetValueOf<Payment>(x => x.Debit);
                             lastBalance = lastBalance + currentRowCredit - currentRowDebit;
                             return lastBalance;
                         });
جزو مثال‌های این کتابخانه است:
AccountingBalanceColumn

برای نمایش بدهکار و بستانکار هم به همین نحو عمل کنید. یک فیلد محاسباتی اضافه کنید. در ادامه، list.GetValueOf مقادیر فیلدهای ستون جاری را به شما می‌دهد. این‌ها را با هم مقایسه کرده و سپس بر این اساس بدهکار یا بستانکار را بازگشت دهید.
بازخوردهای دوره
افزونه‌ای برای کپسوله سازی نکات ارسال یک فرم ASP.NET MVC به سرور توسط jQuery Ajax
سلام وقت بخیر. ممنون از مطلب خوبتون.
میخواستم این موضوع رو هم اضافه کنم. گاهی اوقات فرم‌ها شامل فیلدهای Hidden هستند که با serialize دیتاشون ارسال نمیشه به سرور برای همین این متد رو میتونید استفاده کنید:
$.fn.serializeIncludeDisabledAndForgery = function () {
    var disabled = this.find(":input:disabled").removeAttr("disabled");

    var unindexed_array = this.serializeArray();
    disabled.attr("disabled", "disabled");
    var indexed_array = {};

    $.map(unindexed_array, function (n, i) {
        if (!indexed_array.hasOwnProperty(n['name'])) {
           indexed_array[n['name']] = n['value'];
        });

    //delete indexed_array["__RequestVerificationToken"];

    return indexed_array;
};

نظرات مطالب
امکان تغییر رشته‌ی اتصالی به بانک اطلاعاتی در EF Core در زمان اجرای برنامه
روش دیگری برای تغییر رشته‌های اتصالی در زمان اجرا

به همراه مثال‌های رسمی EF-Core 7x، مثال LazyConnectionStringSample.cs به این مورد پرداخته؛ برای اینکار یک DbConnectionInterceptor سفارشی را طراحی کرده که در متد ConnectionOpeningAsync بازنویسی شده‌ی آن، امکان تغییر رشته‌ی اتصالی جاری به صورت پویا وجود دارد:
    public class ConnectionStringInitializationInterceptor : DbConnectionInterceptor
    {
        public override async ValueTask<InterceptionResult> ConnectionOpeningAsync(
            DbConnection connection, ConnectionEventData eventData, InterceptionResult result,
            CancellationToken cancellationToken = new())
        {
            if (string.IsNullOrEmpty(connection.ConnectionString))
            {
                connection.ConnectionString =  "new data ..." ;
            }

            return result;
        }
    }
نظرات مطالب
روش صحیح تعریف قلم در iTextSharp
با سلام
برای یک سری از فونت‌ها برای مثال IRANSans بعد از Register کردن مقدار برگشتی null هست. در حالت  BaseFont . EMBEDDED و همچنین   BaseFont.NOT_EMBEDDED هم چک کردم. آیا به لایسنس فونت مربوط است ؟
   public iTextSharp.text.Font GetIRANSans()
        {
            var fontName = "IRANSans(FaNum)_Medium";
            if (!FontFactory.IsRegistered(fontName))
            {
                var fontPath = Path.Combine(_hostingEnvironment.WebRootPath + @"\FontPdf\IRANSans(FaNum)_Medium.ttf");
                FontFactory.Register(fontPath);
            }
            return FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        }
  var baseFont = GetIRANSans().BaseFont; // null 

نظرات مطالب
امن سازی برنامه‌های ASP.NET Core توسط IdentityServer 4x - قسمت دهم- ذخیره سازی اطلاعات کاربران IDP در بانک اطلاعاتی
بعد از رجیستر کاربر در idp، به چه صورت به کلاینت بگردیم. بهترین راهش چیه؟ 
مثلا ما idp رو روی دامین http://idp.mydomain.com مستقر کردیم و یک کلاینت رو در آدرس http://client1.mydomain.com داریم، حالا میخواهیم بعد از اینکه کاربر روی idp رجیستر کرد اطلاعات خودش رو، به دامین کلاینت برگرده. به چه صورت باید عمل کنیم؟

توی کنترلر UserRegistrationController
 جایی که قراره ریدایرکت انجام بشه:
            // continue with the flow     
            if (_interaction.IsValidReturnUrl(model.ReturnUrl) || Url.IsLocalUrl(model.ReturnUrl))
            {
                return Redirect(model.ReturnUrl);
            }
و داخل سورس is4  رو هم که نگاه کردم، فقط اجازه میده که روی دامین لوکال خودش باشه! فلسفه‌ی این چیه؟ و چجوری میشه موردی که اول گفتم رو حل کرد؟
ممنون
نظرات مطالب
پیاده سازی JSON Web Token با ASP.NET Web API 2.x
با اجرای مثال خود شما و قرار دادن Breakpoint و  بعد از صدا زدن اکشن Get در کنترلر MyProtectedApi با خطای زیر روبرو شدم:
{
  "message": "Authorization has been denied for this request."
}
داخل این متد در OnAuthorization:
if (!TokenStoreService().IsValidToken(accessToken, int.Parse(userId)))
{
   // this is not our issued token
   this.HandleUnauthorizedRequest(actionContext);
   return;
}
عملیات با شکست مواجه می‌شود و خطای Unauthorized 401 پدیدار می‌شود.