نکته : اگر نیاز دارید در نوار آدرس بالای صفحه دسترسی به  Windows Terminal  داشته باشید به مانند cmd توضیح داده شده در این مطلب :

ویندوز ترمینال رو باز کرده به قسمت "Settings"  بروید.
فایل profiles.json را ویرایش کرده و starting directory را به آن اضافه نمایید.
"profiles": {
    "defaults": {
       // Put settings here that you want to apply to all profiles
       "startingDirectory": "."
    }...
 در نوار آدرس بالای صفحه تایپ کنید wt به این صورت بلافاصله  Windows Terminal  در پوشه‌ی جاری در دسترس خواهد بود .



 
‫۳ سال و ۱۰ ماه قبل، دوشنبه ۲۱ مهر ۱۳۹۹، ساعت ۲۱:۵۷
با سلام
چرا در نگارش 3 با تغییر به JSON.NET  همچنان  باز هم نال دریافت میکنم؟

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddNewtonsoftJson();
}

[Route("api/[controller]")]
    [Authorize]
    [ApiController]
    public class UserApiController : Controller
    {
        private readonly IUserService _userService;

        public UserApiController(IUserService userService)
        {
            _userService = userService;
        }


        [HttpPost("[action]")]
        public async Task<IActionResult> GetCustomers([FromBody] CustomersFilterViewModel filter)
        {
            var model = await _userService.GetCustomers(filter);
return Ok(model); }
const options = {headers: {'Content-Type': 'application/json'}};
axios.post(url, JSON.stringify({ data}), options)

 
‫۳ سال و ۱۱ ماه قبل، چهارشنبه ۲ مهر ۱۳۹۹، ساعت ۱۹:۴۲
در پروژه ای قصد دارم فقط صفحه ای خاص رو با react طراحی کنم و بقیه صفحات توسط razor پیاده سازی شد است دست نخورده باقی بماند.
در این صورت نحوه احراز هویت این صفحه به چه صورت است ؟ 
نحوه خواندن cookie‌های پروژه در react به چه صورت امکان پذیر است ؟
‫۴ سال و ۴ ماه قبل، چهارشنبه ۲۷ فروردین ۱۳۹۹، ساعت ۱۳:۳۴
سپاس از شما مشکل مقدار null برطرف میشه با این تغییر ، منتها فونت خاص ذکر شده Register نمیشه و از کش FontFactory بازیابی نمیشه.
   public iTextSharp.text.Font GetBNazanin()
        {

            var fontName = "BNazanin";
            var fontPath = Path.Combine(_hostingEnvironment.WebRootPath + @"\css\font\BNazanin\BNazanin.ttf");

            if (!FontFactory.IsRegistered(fontName))// به درستی کار می‌کند و در صورت وجود از کش می‌خواند
            {
                FontFactory.Register(fontPath);
            }

            return FontFactory.GetFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        }

  public iTextSharp.text.Font GetIRANSans()
        {
            var fontName = "IRANSansWeb(FaNum)_Medium";
            var fontPath = Path.Combine(_hostingEnvironment.WebRootPath + @"\css\font\IRANSansWeb(FaNum)_Medium.ttf");
          
            if (!FontFactory.IsRegistered(fontName))// always false
            {
                FontFactory.Register(fontPath);
            }
            return FontFactory.GetFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        }

 
‫۴ سال و ۴ ماه قبل، سه‌شنبه ۲۶ فروردین ۱۳۹۹، ساعت ۲۰:۲۸
با سلام
برای یک سری از فونت‌ها برای مثال 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 

‫۴ سال و ۵ ماه قبل، چهارشنبه ۲۰ فروردین ۱۳۹۹، ساعت ۱۵:۵۸
نکته تکمیلی 
اگر در تنظیمات Serilog برنامه جهت لاگ زدن پیغام استثنائات این خط ()Enrich.WithExceptionDetails را اضافه کرده اید.  
using Serilog;
using Serilog.Exceptions;

ILogger logger = new LoggerConfiguration()
    .Enrich.WithExceptionDetails()   // This Line
    .WriteTo.RollingFile(
        new JsonFormatter(renderMessage: true), 
        @"C:\logs\log-{Date}.txt")    
    .CreateLogger();
در EntityFrameworkCore باید موارد دیگری را  نیز به تنظیمات اضافه کنید. در غیر این صورت در مواقع خاص باعث میشود کل جداول موجود در DbConext برنامه را Select زده، که باعث افت شدید برنامه و گاها از کار افتادن برنامه می‌شود.
 
بروزرسانی به 4.1.1 IdentityModel

در نسخه آخر api‌های نظیر  TokenClient - DiscoveryClient و ... منسوخ شده است و توصیه شده با  HttpClient جهت استفاده جایگزین شود.

مستندات 

 متد RenewTokens مطلب جاری به صورت زیر بازنویسی میشود
 private async Task<string> RenewTokens()
        {
            
            // get the current HttpContext to access the tokens
            var currentContext = _httpContextAccessor.HttpContext;

             var disco = await _httpClient.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest
            {
                Address = _configuration["IdentityServer:IDPBaseAddress"]
             });

            if (disco.IsError) throw new Exception(disco.Error);

            // get the saved refresh token
            var currentRefreshToken = await currentContext.GetTokenAsync(OpenIdConnectParameterNames.RefreshToken);

            // refresh the tokens
            var response = await _httpClient.RequestRefreshTokenAsync(new RefreshTokenRequest
            {
                Address = disco.TokenEndpoint,

                ClientId = _configuration["IdentityServer:ClientId"],
                ClientSecret = _configuration["IdentityServer:ClientSecret"],

                RefreshToken = currentRefreshToken
            });


            if (response.IsError)
            {
                throw new Exception("Problem encountered while refreshing tokens.", response.Exception);
            }

            // update the tokens & expiration value
            var updatedTokens = new List<AuthenticationToken>();
            updatedTokens.Add(new AuthenticationToken
            {
                Name = OpenIdConnectParameterNames.IdToken,
                Value = response.IdentityToken
            });
            updatedTokens.Add(new AuthenticationToken
            {
                Name = OpenIdConnectParameterNames.AccessToken,
                Value = response.AccessToken
            });
            updatedTokens.Add(new AuthenticationToken
            {
                Name = OpenIdConnectParameterNames.RefreshToken,
                Value = response.RefreshToken
            });

            var expiresAt = DateTime.UtcNow + TimeSpan.FromSeconds(response.ExpiresIn);
            updatedTokens.Add(new AuthenticationToken
            {
                Name = "expires_at",
                Value = expiresAt.ToString("o", CultureInfo.InvariantCulture)
            });

            // get authenticate result, containing the current principal & properties
            var currentAuthenticateResult = await currentContext.AuthenticateAsync("Cookies");

            // store the updated tokens
            currentAuthenticateResult.Properties.StoreTokens(updatedTokens);

            // sign in
            await currentContext.SignInAsync("Cookies",
                currentAuthenticateResult.Principal, currentAuthenticateResult.Properties);

            // return the new access token
            return response.AccessToken;
        }