اشتراک‌ها
Retrofit در دات نت

یکی از محبوبترین کتابخانه‌ها در برنامه نویسی اندروید، retrofit است. این کتابخانه این امکان را به شما میدهد تنها با امضای یک متد در یک اینترفیس کلیه امکانات شامل دریافت اطلاعات از وب سرویس و همچنین serialization را داشته باشید و دیگر نیازی به نگرانی در مورد مسائل چون مدیریت تردها و سریالایز و ارسال درخواست و دریافت پاسخ و ... نداشته باشید و کار را سریعتر از گذشته پیش ببرید.

و همچنین این کتابخانه و هچنین بررسی آن توسطآقای هانسلمن

Retrofit در دات نت
نظرات مطالب
نحوه استفاده از ViewModel در ASP.NET MVC
این خطا به این معنا است که در اکشن متد کنترلر متناظر، خروجی نهایی و مدل ارسال شده به View، از جنس تک شیء Product است؛ اما این View نیاز به دریافت مدلی از کنترلر، از جنس ProductCommentListViewModel دارد (نوع خروجی اکشن متد را بررسی کنید).
حتی در حالت RenderPartial هم ممکن است این خطا را دریافت کنید. کلا در هر جایی که شیء‌ایی به یک View برای رندر ارسال می‌شود، نوع آن و نوع مدل تعریف شده View را تطابق دهید.
مطالب
پردازش فایل‌های XML با استفاده از jQuery

فرض کنید مثال دریافت اطلاعات API فیدبرنر را بخواهیم با استفاده از jQuery پیاده سازی کنیم، یعنی امکان برنامه نویسی سمت سرور را نداریم و می‌خواهیم با استفاده از جاوا اسکریپت، تعداد مشترکین فید یک سایت را نمایش دهیم.
برای مثال آدرس دریافت اطلاعات مربوط به API فیدبرنر وبلاگ جاری به صورت زیر است:

و در حالت کلی :
http://api.feedburner.com/awareness/1.0/GetFeedData?uri=<feeduri>

که حاصل آن برای مثال یک فایل XML با فرمت زیر می‌باشد:

<rsp stat="ok">
<feed id="fhphjt61bueu08k93ehujpu234" uri="vahidnasiri">
<entry date="2009-01-23" circulation="153" hits="276" reach="10"/>
</feed>
</rsp>

همانطور که مطلع هستید چند روزی است که jQuery 1.3.1 ارائه شده است. جهت استفاده از آخرین نگارش موجود آن تا این زمان، می‌توان از گوگل به عنوان هاست این کتابخانه به صورت زیر استفاده کرد:

<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js' type='text/javascript'></script>

نحوه خواندن مقدار circulation فایل xml ذخیره شده بر روی کامپیوتر:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>FeedBurner API</title>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js' type='text/javascript'>
</script>
<script type="text/javascript">
function parseXml(xml){
//find every entry and print the circulation
$(xml).find("entry").each(function(){
$("#output").append($(this).attr("circulation"));
});
}

$(document).ready(function(){
$.ajax({
type: "GET",
url: "GetFeedData_local.xml",
dataType: "xml",
success: parseXml
});
});
</script>
</head>
<body>
<div dir="rtl" style="font-family:tahoma; font-size:12px;">
تعداد مشترکین تغذیه خبری سایت:
<div id="output">
</div>
</div>
</body>
</html>

با استفاده از قابلیت Ajax کتابخانه jQuery ، اطلاعات فایل محلی GetFeedData_local.xml دریافت شده و محتوای آن به تابع parseXml پاس می‌شود (توسط قسمت success). سپس در این تابع تمام تگ‌های entry یافت شده و مقدار circulation آن‌ها به یک div با ID معادل output اضافه می‌شود.
مثال فوق در مورد خواندن اطلاعات از یک فایل xml می‌تواند برای مثال این کاربرد را در یک سایت داشته باشد:
نمایش اتفاقی سخن روز یا سخن بزرگان و امثال آن بدون برنامه نویسی سمت سرور جهت انجام این کار از یک فایل xml تهیه شده، بدون نیاز به استفاده از دیتابیس خاصی.

تا اینجای کار مشکلی نیست. اما همانطور که در مطلب مقابله با حملات CSRF نیز ذکر شد، مرورگرهای جدید امکان ارسال یا دریافت اطلاعات به صورت Ajax را بین سایت‌ها ممنوع کرده‌اند (ماجرا هم از آنجا شروع شد که یکبار جی‌میل این باگ امنیتی را داشته است). بنابراین اگر شما بجای url قسمت Ajax فوق، آدرس سایت فید برنر را قرار دهید با خطای زیر متوقف خواهید شد:

Access to restricted URI denied

تمام موارد دیگری هم که در jQuery برای دریافت اطلاعات از یک فایل یا url موجود است (مثلا تابع load یا get و امثال آن) فقط به سایت جاری و دومین جاری باید ختم شوند در غیر اینصورت توسط مرورگرهای جدید متوقف خواهند شد.

نظرات مطالب
روش‌هایی برای بهبود قابلیت دیباگ بسته‌های NuGet
ممنون بابت مطلب خوبتون
الان امکان source link روی پکیج EFCoreSecondLevelCacheInterceptor هم توسط خودتون اعمال شده ولی من نتونستم موقع دیباگ Step Into کنم نه با VS و نه با VSCode (تنظیمات لازم رو هم اعمال کردم)
خودتون تونستین نتیجه بگیرین از این روش؟
سورس پکیج‌های ASPNET Core رو هم وقتی داخلشو دیباگ میکنم بعضی وقتا (ضمن اجرای اون کد) از روی خطوط میپره و یا مقایر متغیر‌ها رو نشون نمیده که به احتمال زیاد دلیلش باید بهینه سازی‌های صورت گرفته باشه که در این صورت یعنی از SourceLink برای بازیابی سورس اصلی بهره نبرده؟
من قبلا بحث debugging کتابخانه‌های خودم رو توسط تنظیم زیر انجام میدادم و به خوبی جواب می‌داد. البته شاید بهینه نباشه (چون هم pdb‌ها داخلش embed میشن و هم optimize رو جهت debugging  experience بهتر غیر فعال کردم) ولی حداقلش اینه کار میکنه (بر خلاف روش‌های اصولیش که من خیلی هم بررسی کردم ولی نتونستم جواب درست و درمونی ازشون بگیرم)
<DebugType>embedded</DebugType>
<Optimize>false</Optimize>

نظرات مطالب
شروع به کار با EF Core 1.0 - قسمت 7 - بررسی رابطه‌ی One-to-Many
«بهبود عملکرد» با «بهبود کارآیی» یکی نیست. پیاده سازی سیستم change tracking در حالت کلی، بدون پیاده سازی مباحث AOP غیرممکن است. بهتر است دوره‌ی مرتبطی را در سایت در این مورد مرور کنید تا کلیات بحث تشکیل Proxyها بهتر مشخص شوند (و ... تشکیل پروکسی با روش‌های مختلفی و با الگوریتم‌های متفاوتی ممکن است و مهم نیست که dynamic proxy چندسکویی باشد یا خیر؛ این مورد نام یک الگوی طراحی شیء گرا است و نه یک کتابخانه‌ی خاص). هدف من از عنوان این مسایل، اشاره به کلیات زیرساخت پیاده سازی این مباحث هست.
برای نمونه زمانیکه مقدار خاصیت شیء واکشی شده‌ای از Context را تغییر می‌دهید و سپس SaveChanges را فراخوانی می‌کنید، در این بین یک پروکسی وجود دارد (یک لایه‌ی نامرئی و حائل بین شیء اصلی و تغییراتی که قرار است به آن اعمال شوند) که به تغییرات گوش فرا می‌دهد و در نهایت صرفا یک کوئری به روز رسانی آن فیلد خاص را تولید می‌کند و نه تمام فیلدهای دیگر را. این نوع مفاهیم کلی در اینجا مدنظر هستند. یک نمونه پیاده سازی کلی این مفهوم را در اینجا می‌توانید مشاهده کنید.
همچنین EF Core 2.1 به همراه بسته‌ی Microsoft.EntityFrameworkCore.Proxies است که پیاده سازی Lazy loading را میسر کرده‌است و از Castel.Core هم استفاده می‌کند (یا همان Castle DynamicProxy که در دوره «Aspect oriented programming» مورد بررسی قرار گرفته‌است).
نظرات مطالب
احراز هویت و اعتبارسنجی کاربران در برنامه‌های Angular - قسمت چهارم - به روز رسانی خودکار توکن‌ها
سلام؛ در خصوص اینکه مثلا کاربری غیرفعال شده ( قبل از اینکه غیرفعال بشه توکن را دریافت کرده) و در درخواست‌های جدید بررسی بشه که اگر غیر فعاله توکن حذف بشه و به صفحه‌ی 403 انتقال داده بشه هم میشه راهنمایی کنین؟
نظرات مطالب
آزمایش Web APIs توسط Postman - قسمت ششم - اعتبارسنجی مبتنی بر JWT
این روش فراخوانی برروی CORS‌ها رو چندین بار قبلا نیز بررسی کرده بودم ولی نمی‌دونم چرا وقتی درخواست از سرور دیگر انجام میشه هیچ کوکی برروی مرورگر ذخیره نمیشه بنابراین متد  getCookie فایل نمونه ajax ای نمی‌تونه کوکی مربوط به antiforgerytoken رو دریافت کنه و پیغام badrequest صادر میشه.
نظرات مطالب
آشنایی با ساختار یک Pull Request خوب
چگونه تمام تغییرات یک PR حجیم را از GitHub دانلود (بدون Merge آن) و به صورت محلی بررسی کنیم؟

ابتدا در برگه‌ی Commits، آخرین Commit انجام شده را پیدا کنید (ممکن است بیش از یک مورد باشند؛ بنابراین آخرین مورد را در لیست انتخاب کنید):


سپس بر روی دکمه‌ی <> آن کلیک نمائید تا کل مخزن کد را در این نقطه‌ی از زمان نمایش دهد:


اکنون می‌توانید این مخزن کد شبیه سازی شده را همانند سایر مخزن‌های کد دریافت کنید.
نظرات مطالب
ASP.NET MVC #18
- آیا فیلتر Authorize را با تگ authorization و location در وب کانفیگ با هم بکار برده‌اید؟ فقط از
فیلتر Authorize در ASP.NET MVC استفاده کنید کافی است.
- بررسی کنید مقدار User.Identity.Name پس از لاگین چیست؟
(در یک صفحه معمولی)
- یک breakpoint داخل public override bool IsUserInRole قرار دهید و ببینید اصلا صدا زده می‌شود؟ چه پارامترهایی را دریافت می‌کند؟
نظرات مطالب
EF Code First #12
خیر. زمانیکه از EF استفاده می‌کنید، DAL همان EF است و تنظیمات آن.
پیشنهاد من این است که یکبار پروژه مربوطه رو دریافت کنید و بعد پروژه‌های DataLayer و همچنین ServiceLayer و غیره آن‌را بررسی کنید.
در این مثال‌ها فقط از اینترفیس‌های ServiceLayer (و نه DataLayer مجزای آن) به کمک ترزیق وابستگی‌ها در لایه نمایشی استفاده شده.