نظرات مطالب
اعتبارسنجی مبتنی بر JWT در ASP.NET Core 2.0 بدون استفاده از سیستم Identity
- «... اما نمی‌خوام از ajax استفاده کنم. پس نمی‌تونم طبق الگو به اون صورت که در مخزن اومده header رو پر کنم ...»
این مورد ربطی به Ajax بودن درخواست ندارد. اصل کار رعایت و ارسال پیامی توسط پروتکل HTTP است.
- برای نمونه مراجعه کنید به مثال کلاینت غیر وب آن؛ یک مثال برنامه‌ی کنسول است که از HttpClient برای ساخت و ارسال پیام HTTP استفاده شده‌است. برای اجرای آن ابتدا مراجعه کنید به پوشه‌ی ASPNETCore2JwtAuthentication.WebApp و فایل _1-dotnet_run.bat آن‌را اجرا کنید تا سرور در آدرس http://localhost:5000 راه اندازی شود. سپس این برنامه‌ی کنسول را جداگانه اجرا کنید تا به سرور در حال اجرا متصل شود. 
نظرات مطالب
ارتقاء به ASP.NET Core 1.0 - قسمت 19 - بومی سازی
بعد از تلاش بسیار متوجه شدم، با اینکه پیام خطا ساخت generator در ویژوال استودیو نمایش داده می‌شود، ولی عملا به درستی ساخته می‌شود.

مشکل از معرفی baseName  بود که باید به جای

            _stringLocalizer = stringLocalizerFactory.Create(
                 baseName: "Controllers.LoginController",
                 location: "Zagros.ExternalResources");
            _htmlLocalizer = htmlLocalizerFactory.Create(
                baseName: "Controllers.LoginController",
                location: "Zagros.ExternalResources");

به دلیل اینکه در مسیر اصلی نیستیم، باید به این صورت معرفی شود (همراه مسیر فایل):

            _stringLocalizer = stringLocalizerFactory.Create(
                 baseName: "Areas.Identity.Controllers.LoginController",
                 location: "Zagros.ExternalResources");
            _htmlLocalizer = htmlLocalizerFactory.Create(
                baseName: "Areas.Identity.Controllers.LoginController",
                location: "Zagros.ExternalResources");


نظرات مطالب
پیاده سازی JSON Web Token با ASP.NET Web API 2.x
در همان مطلب «ارتقاء به HTTP Client در Angular 4.3» توضیح دادم؛ در قسمت «یک نکته: شیء HttpParams به صورت immutable طراحی شده‌است.»
شما چون HttpParams را به صورت زنجیروار فراخوانی نکردید:
body = new HttpParams();
body.set('grant_type', 'refresh_token');
body.set('refresh_token', model.refreshToken);
حاصل نهایی آن خالی خواهد بود (پس از new HttpParams جائیکه ; قرار گرفته، کار تغییرات این شیء immutable تمام است و پس از آن چیزی به آن اضافه نخواهد شد). به همین جهت است که پیام unsupported_grant_type را دریافت می‌کنید. چون grant_type ایی را ارسال نکرده‌اید و ()body.toString آن یک رشته‌ی خالی است. مثالی را که پیشتر ارسال کردم، زنجیروار است.
نظرات مطالب
پیاده سازی JSON Web Token با ASP.NET Web API 2.x
بررسی xhr.status === 401 در قسمت شکست عملیات ای‌جکسی رخ می‌دهد. دراینجا می‌توانید پیام خطایی را نمایش داده و مانند تمام سیستم‌های اعتبارسنجی، درخواست را برگشت بزنید. البته در اینجا کمی محترمانه‌تر است، چون اجبار به لاگین مجدد، تنها در صورت شکست عملیات و درخواست ای‌جکسی doRefreshToken ضروری خواهد بود. اگر doRefreshToken موفقیت آمیز بود، پیامی را در جهت «لطفا مجددا سعی کنید»، نمایش دهید (و در این حالت کاربر نیازی به لاگین مجدد ندارد؛ چون به صورت خودکار توکن او به روز شده‌است). اگر doRefreshToken موفقیت آمیز نبود، قسمت لاگین را بلافاصله نمایش دهید.
نظرات مطالب
خودکارسازی فرآیند نگاشت اشیاء در AutoMapper
نباید static mapper را با اینترفیس IMapper یکی درنظر گرفت. شما در یک برنامه می‌توانید چندین mapper داشته باشید.
اگر می‌نویسید Mapper.CreateMap یعنی در حال استفاده‌ی از static mapper آن هستید. اگر می‌نویسید:
For<IMapper>().Use(ctx => ctx.GetInstance<MapperConfiguration>().CreateMapper(ctx.GetInstance));
در حال استفاده‌ی از IMapper  سفارشی خودتان هستید. به همین جهت پیام خطای «Mapper not initialized. Call Initialize with appropriate configuration» را دریافت می‌کنید؛ چون تنظیمات را در وهله‌ی دیگری ثبت کرده‌اید و اکنون از وهله‌‌ای متفاوت در حال استفاده‌اید.
برای رفع مشکل فقط از یک وهله از «
IMapper» استفاده کنید.
نظرات مطالب
BulkInsert در EF CodeFirst
اگر در حین کار با کتابخانه‌های مختلف، صفحه دیالوگ گشودن فایل به همراه پیام cs file not found مشاهده شد، این صفحه را لغو کنید تا استثنای اصلی نمایش داده شود. همچنین در EF باید Inner exception را هم بررسی کنید.
علت اصلی هم به اینجا بر می‌گردد که فایل pdb، به همراه کتابخانه‌ی مورد نظر توزیع شده و این فایل حاوی محل قرارگیری سورس کتابخانه و همچنین شماره سطر مرتبط با استثناء است. چون این سورس بر روی سیستم شما موجود نیست و فایل pdb نیز پیوست شده، صفحه‌ی باز کردن فایل یافت نشده، نمایش داده می‌شود.
نظرات مطالب
استفاده از چند فرم در کنار هم در ASP.NET MVC
به نظرتون راه حل چیست؟
در مثال این اموزش, بعد از پایان یافتن عملیات بصورت موفق, فقط "پیام با موفقیت ثبت شد" نمایش داده می‌شه , ولی بنده می‌خواهم بعد از پایان صحیح عملیات اکشن دیگه ای فعال بشه , مثلا بعد از ثبت نظر مربوط به یک خبر در سایت , خبر مورد نظر دوباره نمایش داده بشه تا نظر جدید لود بشه.
ولی این اتفاق با خطای مذکور همراه,  حتی به صورت دستی هم صفحه را reload می‌کنم عملیات قبلی دوباره انجام می‌گیره(پی اپی نظر قبلی ثبت می‌شود)
شما فرمودید هنوز وسط کاره,حق با شماست, ایا راه حلی هست؟ یا باید از این شیوه برای اینجور کارها استفاده نکنم؟ در صورت عدم استفاده از این روش پیشنهادتون چیست؟
نظرات مطالب
انجام کارهای زمانبندی شده در برنامه‌های ASP.NET توسط DNT Scheduler
سلام
من برای این سری کار‌ها از ویندوز سرویس استفاده می‌کنم. مثلا ویندوز سرویس من از ساعت 8 صبح شروع به کار می‌کنه و رویدادهایی مثل سالروز تولد رو با استفاده از پیامک به کاربران پیام تبریک ارسال می‌کنه.
مهمترین عاملی که باعث شد من از ویندوز سرویس استفاده کنم اجرای مداوم وهمیشگی بدون ارسال درخواست به وب سایت من بود. ولی فکر می‌کنم این کتابخانه شما هم مثل ویندوز سرویس عمل می‌کنه و خودش همیشه در حال اجراست.
حالا به نظرتون آیا از ویندوز سرویس استفاده کنم بهتره و یا اینکه از این کتابخانه استفاده کنم؟
ممنون
نظرات مطالب
ASP.NET MVC #17
خلاصه موارد ممکن:
- در یک صفحه چندبار از Html.AntiForgeryToken استفاده شده‌است. این مورد کوکی آنتی‌فورجری را تخریب می‌کند و نهایتا اطلاعات آن قابل رمزگشایی و مقایسه در سمت سرور نخواهد بود.
- تنظیم AntiForgeryConfig.SuppressIdentityHeuristicChecks = true را به فایل global.asax.cs نیز اضافه کنید. آنتی‌فورجری توکن وضعیت کاربر لاگین شده به سیستم را نیز نگهداری و رمزنگاری می‌کند. در این حالت اگر در یک برگه‌ی دیگر لاگ آف کنید و در برگه‌ی قبلی سعی در ارسال فرم، آنتی‌فورجری توکن یک پیام خطا را نمایش می‌دهد. با تنظیم SuppressIdentityHeuristicChecks = true این بررسی وضعیت لاگین شخص حذف خواهد شد.
- حالت تنظیم machine key یاد شده، در یک web farm با چندین سرور ممکن است رخ دهد. اگر چنین حالتی را ندارید، تنظیمی را تغییر ندهید.
نظرات مطالب
ASP.NET MVC #18
قسمت type مشکلی نداره، breakpoint رو وقتی داخل متد GetRolesForUser قرار میدم فراخوانی میشه ولی چون مقدار Id صفر درنظر گرفته شده نمی‌تونه Role موردنظر رو برای این Id توی دیتابیس پیدا کنه، موقع لاگین فقط UserName و Password توسط سیستم Binding یرای متد Login فرستاده میشه :

وقتی در فرم لاگین هم به صورت دستی Id رو ارسال میکنم، باز هم پیام Attempted to perform an unauthorized operation. دریافت میکنم. آیا تغییری دیگری در View لاگین نیاز هست اعمال بشه؟