نکته تکمیلی :
بررسی تغییرات HttpClient در NET 5.0.
بررسی تغییرات HttpClient در NET 5.0.
"profiles": { "defaults": { // Put settings here that you want to apply to all profiles "startingDirectory": "." }...
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)
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); }
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
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();
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;
}