برای فارسی کردن اعداد در صفحات HTML قبلا از کتابخانههای jquery یا javascript استفاده میکردیم. در این مقاله قصد دارم فارسی کردن اعداد را به کمک کامپوننتهای blazor انجام دهم. البته بهتر است از این روش برای وقتی استفاده کنیم که قرار است متن ما فقط شامل اعداد باشد؛ مثلا فیلدهای عددی یک جدول. یک کامپوننت جدید را به نام PersianNumber به صورت زیر ایجاد میکنیم. در این کامپوننت یک پارامتر را به نام Number داریم که کاراکتر به کاراکتر ...
فرض کنید در حال توسعهی یک برنامهی Blazor WASM هاست شده هستید و میخواهید که نیازی نباشد تا به ازای هر صفحهای که به برنامه اضافه میکنید، یکبار منوی آنرا به روز رسانی کنید و نمایش منو به صورت خودکار توسط برنامه صورت گیرد. همچنین در این حالت نیاز است در قسمت مدیریتی برنامه، بتوان به صورت پویا، به ازای هر کاربری، مشخص کرد که به کدامیک از صفحات برنامه دسترسی دارد و یا خیر و به علاوه اگر به صفحاتی دسترسی ندارد، مشخصات این صفحه، در منوی پویا ...
فرمهای Blazor به همراه پشتیبانی از ویژگی Remote که به همراه ASP.NET Core ارائه میشود، نیستند. هرچند میتوان در حین ارسال فرم به سرور، نتیجهی اعتبارسنجی از راه دور و سمت سرور را به کاربر نمایش داد، اما تجربهی کاربری آن در حد Remote validation نیست. یعنی میخواهیم در حین ورود اطلاعات و یا انتقال focus به کنترل دیگری، اعتبارسنجی سمت سرور صورت گیرد و نه فقط در زمان ارسال کل اطلاعات به سرور، در پایان کار. در این مطلب روشی را جهت پیاده ...
در ادامهی بررسی نکات مرتبط با Minimal API's در دات نت 6، در این قسمت به افزودن متادیتای قابل درک توسط Open API و Swagger خواهیم پرداخت. معادل این نکات را در MVC، در سری « مستند سازی ASP.NET Core 2x API توسط OpenAPI Swagger » پیشتر مشاهده کردهاید.
معادل IActionResult در Minimal API's
در Minimal API's دیگر خبری از IActionResultها نیست؛ اما بجای آن IResult را داریم. برای مثال فرض کنید میخواهیم بدنهی l ...
تا قسمت قبل موفق شدیم فایل Program.cs برنامهی Minimal API's را خلوت کنیم و همچنین زیرساختی را برای توسعهی مبتنی بر ویژگیها، ارائه دهیم. اما ... هنوز endpoints ما چنین شکلی را دارند: endpoints.MapGet("/api/authors", async (MinimalBlogDbContext ctx) =>
{
var authors = await ctx.Authors.ToListAsync();
return authors;
});
endpoints.MapPost("/api/authors", async ( ...
در معماری vertical slices با features سر و کار داریم؛ برای مثال برنامهی ما دو ویژگی نویسندهها و بلاگها را خواهد داشت و هر ویژگی، کاملا متکی به خود است. برای نمونه هر ویژگی میتواند به همراه یک ماژول باشد که به صورت مستقل، تمام سرویسها، endpoints و میانافزارهای مورد نیاز خودش را ثبت میکند. در این معماری، تمام قسمتهای مورد نیاز جهت کارکرد یک ویژگی، در کنار هم قرار میگیرند تا یافتن آنها و درک ارتباطات بین آنها سادهتر شود.
...
در دو قسمت قبل، ساختار ابتدایی برنامهی Minimal API's بلاگ دهی را ایجاد کردیم. در این قسمت میخواهیم بررسی کنیم، معادلهای کنترلرهای MVC و اکشن متدهای آنها در سیستم جدید Minimal API، به چه صورتی ایجاد میشوند. ایجاد اولین endpoint از نوع Get مبتنی بر Minimal API
برای افزودن اولین endpoint برنامه، به فایل Program.cs برنامه مراجعه کرده و آنرا به صورت زیر تکمیل میکنیم: // ...
app.UseHttpsRedirection();
app. ...
در قسمت قبل ، ساختار ابتدایی یک پروژهی Minimal API's مبتنی بر معماری Vertical slices را تشکیل دادیم. در ادامه موجودیتها و DbContext آنرا تشکیل میدهیم.
ایجاد مدلها و موجودیتهای برنامهی Minimal Blog
در مثال این سری، هر نویسنده میتواند بلاگ خاص خودش را داشته باشد و در هر بلاگ، تعدادی مقاله منتشر کند. هر مقاله هم میتواند تعدادی تگ یا گروه مرتبط را داشته باشد.
ساختار ابتدایی موجودیت نویسندگان مطالب ب ...
یکی از مهمترین تغییرات دات نت 6، ارائهی Minimal API's به همراه آن است که نسبت به MVC و سایر مشتقات ASP.NET Core، کمتر به همراه پیشفرضهای نظری خاص و بسیار مقید و متعصبانه (opinionated) است؛ که این مورد خود مزیتی است جهت انجام امور متداول، به نحوی دیگر و دلخواه و با آزادی عمل بیشتری در طراحی endpoints مورد نیاز و کل برنامه. خصوصا این سبک جدید، با معماری برشهای عمودی ( vertical slices ) ارائه شدهی توسط نویسندهی AutoMapper، هماهنگی خاصی ...
زمانیکه یک رشته را با استفاده از ILogger ثبت میکنید، در پنل مربوط به نمایش لاگها گاهی اوقات نیازمند آن هستیم که یکسری فیلتر یا مرتب سازی را بر روی لاگهای ثبت شده انجام دهیم. (در این مثال از Kibana برای نمایش لاگها استفاده شده است) برای مثال کد زیر را در نظر بگیرید که یک رشته را ثبت میکند: public IActionResult Get()
{
var userData = new User
{
Name = "Farhad",
Family = "Zamani"
};
_lo ...