‫۱ سال و ۹ ماه قبل، شنبه ۱۲ آذر ۱۴۰۱، ساعت ۱۴:۳۵
کروم از نسخه 108 امکان استفاده از این پرچم را نمی‌دهد.
گزینه دیگر برای معرفی امن آدرس‌ها و اجازه دسترسی به private-network از طرف آدرس‌ها استفاده از گزینه Insecure origins treated as secure  از طریق پرچم زیر است:
chrome://flags/#unsafely-treat-insecure-origin-as-secure 
برای معرفی آدرس‌ها، آن‌ها را به صورت comma-separated وارد می‌کنیم و وضعیت گزینه را از Disabled به Enabled تغییر می‌دهیم. با راه‌اندازی مجدد کروم، تنظیمات ذخیره خواهد شد.

‫۲ سال و ۲ ماه قبل، چهارشنبه ۲۹ تیر ۱۴۰۱، ساعت ۱۷:۰۱
  1. با توجه به مزیت‌هایی که قبلاً در پیاده‌سازی سرویس محور برای IUnitOfWork در نظر گرفته می‌شد و به طور مفصل هم درباره آن بحث شد، در این نوع پیاده‌سازی آیا باید نگرش جدیدی به استفاده مستقیم از DbContext اصلی برنامه داشت؟
  2. برای استفاده از مطلب کار با چندین نوع بانک اطلاعاتی متفاوت در Entity Framework Core در حالت فوق و با توجه به حذف IUnitOfWork، آیا پیاده‌سازی زیر صحیح است:
namespace MinimalBlog.Dal.SqlServer

public class SqlServerDbContext : MinimalBlogDbContext
{
        //Sql Server Settings
}
namespace MinimalBlog.Dal.Sqlite

public class SqliteDbContext : MinimalBlogDbContext
{
        //Sqlite Settings
}
var connectionStringKey = Configuration.GetConnectionString("InUseKey");
var connectionString = Configuration.GetConnectionString(connectionStringKey);

switch (connectionStringKey)
{
    case "SqlServerConnection":
        services.AddScoped<MinimalBlogDbContext, SqlServerDbContext>();
        services.AddDbContext<SqlServerDbContext>(options => opt.UseSqlServer(connectionString));
        break;
    case "SqliteConnection":
        services.AddScoped<MinimalBlogDbContext, SqliteDbContext>();
        services.AddDbContext<SqliteDbContext>(options => options.UseSqlite(connectionString));
        break;
    default:
        throw new NotImplementedException($"`{connectionStringKey}` is not defined in `appsettings.json` file.");
}

‫۳ سال قبل، دوشنبه ۱۲ مهر ۱۴۰۰، ساعت ۱۶:۵۱
با توجه به پیاده‌سازی  CORS-RFC1918  در مرورگر کروم، با وجود پذیرش درخواست‌های CORS، از درخواست‌هایی که از public-network به منابعی از private-network ارسال شوند جلوگیری می‌شود.
به طور مثال از درخواست‌هایی که از طرف یک سایت اینترنتی به سرویس‌های در حال اجرا بر روی کلاینت (مانند سرویس‌های وبی دستگاه‌های پوز) ارسال می‌شود، جلوگیری می‌شود.
با غیر فعال کردن chrome://flags/#block-insecure-private-network-requests  این رفتار کروم را می‌توان تغییر داد.
‫۳ سال و ۱۰ ماه قبل، پنجشنبه ۶ آذر ۱۳۹۹، ساعت ۱۲:۴۹
در مورد خطا، اگر فایل گزارش و دیتای آن موجود باشد شاید بتوان بررسی کرد.
در مورد متد SynchronizeBusinessObjects  و یا  Synchronize - برای RegData - هم برای ایجاد ساختار دیتای ارسالی به گزارش در قسمت Dictionary استفاده می‌شود و اجباری به استفاده از آن نیست. می‌توان بر اساس پارامتر maxLevel  تعداد لایه‌های نمایش را مقداردهی کرد.
در مثال بالا به صورت زیر نتایج خروجی آن را با هم مقایسه کنید:
report.RegBusinessObject("CustomerServiceReport", data);

report.Save(StiNetCoreHelper.MapPath(this, "Reports/CustomerServiceReportNoSync.mrt"));

report.Dictionary.SynchronizeBusinessObjects();
report.Save(StiNetCoreHelper.MapPath(this, "Reports/CustomerServiceReportSync.mrt"));

report.Dictionary.SynchronizeBusinessObjects(0);
report.Save(StiNetCoreHelper.MapPath(this, "Reports/CustomerServiceReportSync0.mrt"));

report.Dictionary.SynchronizeBusinessObjects(1);
report.Save(StiNetCoreHelper.MapPath(this, "Reports/CustomerServiceReportSync1.mrt"));

report.Dictionary.SynchronizeBusinessObjects(2);
report.Save(StiNetCoreHelper.MapPath(this, "Reports/CustomerServiceReportSync2.mrt"));

NoSync

Sync

 Sync0

Sync1

Sync2


‫۳ سال و ۱۰ ماه قبل، سه‌شنبه ۴ آذر ۱۳۹۹، ساعت ۱۶:۵۹
مانند مثال بالا می‌توانید به سطوح جزییات گزارش خود بیافزایید. به طور مثال مدل‌های زیر را در نظر بگیرید:
  public class CustomerServiceReport
  {
        public string ReportTitle { get; set; }
        public string ReportDate { get; set; }
        //...

        public List<CustomerRow> Customers { get; set; } = new List<CustomerRow>(); 
  }

 public class CustomerRow
 {
        public int CustomerId { get; set; }
        public string CustomerName { get; set; }
        public string Phone { get; set; }
        //...

        public List<ServiceRow> Services { get; set; } = new List<ServiceRow>();  
} public class ServiceRow { public int ServiceId { get; set; } public string ServiceName { get; set; } public int Count { get; set; } public long Price { get; set; } }
که در فایل mrt مربوط به گزارش به صورت زیر پیاده‌سازی می‌شود

در برنامه هم به صورت زیر دیتای مورد نیاز گزارش - به صورت نمونه - ایجاد می‌شود و در انتها با استفاده از RegBusinessObject و SynchronizeBusinessObjects به گزارش ثبت و ارسال می‌گردد.
var data = new CustomerServiceReport
{
    ReportDate = "1399/09/04",
    ReportTitle = "گزارش سرویس‌های مشتریان"
};

for (int i = 0; i < 5; i++)
{
    var customer = new CustomerRow
    {
        CustomerId = i + 1,
        CustomerName = $"مشتری شماره {i + 1}",
        Phone = "001122"
    };

    for (int j = 0; j < 3; j++)
    {
        var service = new ServiceRow
        {
            ServiceId = j + 1,
            ServiceName = $"سرویس شماره {j + 1}",
            Count = (j + 1) * 10,
            Price = (j + 1) * 10000
        };

        customer.Services.Add(service); //اضافه کردن سرویس به هر مشتری
    }

    data.Customers.Add(customer); // اضافه کردن مشتری به گزارش
}

var report = new StiReport();
report.RegBusinessObject("CustomerServiceReport", data);
report.Dictionary.SynchronizeBusinessObjects();

‫۴ سال و ۷ ماه قبل، دوشنبه ۱۲ اسفند ۱۳۹۸، ساعت ۱۷:۳۸
برای کامپایل مجدد فایل‌های ویو (cshtml) در هنگام اجرای برنامه (runtime compilationو مشاهده تغییرات اعمال شده بر روی آن‌ها به صورت زیر عمل می‌کنیم:

  • ASP.NET Core 2.2
services.AddMvc()
    .AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);

  • ASP.NET Core 3.0 , 3.1
ابتدا بسته  Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation به پروژه اضافه کرده و سپس از کد زیر استفاده می‌کنیم:
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews()
        .AddRazorRuntimeCompilation();
    //...
}