| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
parent directory.. | ||||
ASP.NET Core specific extension methods for modern web development. This package provides specialized extensions for configuration management, web utilities, and HTTP operations that require ASP.NET Core dependencies.
Recent Improvements (v0.3.0):
dotnet add package PowerCSharp.Extensions.AspNetCoreSimplified configuration binding and options management for ASP.NET Core applications.
using PowerCSharp.Extensions.AspNetCore;
using Microsoft.Extensions.Configuration;
var configuration = new ConfigurationBuilder().Build();
var options = configuration.GetOptions<MyAppOptions>("MyApp"); // Reads from "MyApp" sectionFeatures:
Enhanced HTTP operations for web applications including request cloning and URL manipulation.
using PowerCSharp.Extensions.AspNetCore;
using System.Net.Http;
// HTTP Status Code utilities
HttpStatusCode status = HttpStatusCode.OK;
bool success = status.IsSuccessful(); // true
bool clientError = status.IsClientError(); // false
bool serverError = status.IsServerError(); // false
bool isRedirect = status.IsRedirect(); // false
// URI manipulation with query string support
Uri uri = new Uri("https://example.com");
Uri withParam = uri.AddParameter("search", "test"); // https://example.com?search=test
Uri multipleParams = uri.AddParameter("page", "1").AddParameter("size", "10");
// HTTP Request cloning for retry scenarios
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.example.com");
var clonedRequest = request.Clone();
var clonedAsync = await request.CloneAsync();Features:
Built specifically for ASP.NET Core applications with proper dependency injection support and middleware compatibility.
All extension methods are designed to be thread-safe when used with immutable data structures.
Comprehensive null checking and graceful error handling throughout.
Methods are optimized for performance with minimal allocations and efficient algorithms.
Leverages the latest .NET 8.0 features and ASP.NET Core capabilities.
PowerCSharp.Extensions.AspNetCore depends on:
PowerCSharp.Extensions.AspNetCore includes comprehensive unit tests. Run tests with:
dotnet test src/PowerCSharp.Extensions.AspNetCore.Testsusing PowerCSharp.Extensions.AspNetCore;
using Microsoft.AspNetCore.Mvc;
[ApiController]
public class UsersController : ControllerBase
{
private readonly IConfiguration _configuration;
public UsersController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet]
public IActionResult GetUsers([FromQuery] string search = "", [FromQuery] int page = 1)
{
// Load configuration
var apiSettings = _configuration.GetOptions<ApiSettings>("ApiSettings");
// Build URL with parameters
var baseUrl = new Uri(apiSettings.BaseUrl);
var requestUrl = baseUrl
.AddParameter("search", search)
.AddParameter("page", page.ToString())
.AddParameter("size", apiSettings.DefaultPageSize.ToString());
return Ok(new { RequestUrl = requestUrl.ToString() });
}
}using PowerCSharp.Extensions.AspNetCore;
using System.Net.Http;
public class ResilientHttpClient
{
private readonly HttpClient _httpClient;
public ResilientHttpClient(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<HttpResponseMessage> ExecuteWithRetryAsync(HttpRequestMessage request, int maxRetries = 3)
{
HttpResponseMessage? response = null;
for (int attempt = 1; attempt <= maxRetries; attempt++)
{
try
{
// Clone request for each attempt (HttpRequestMessage can only be sent once)
var clonedRequest = request.Clone();
response = await _httpClient.SendAsync(clonedRequest);
if (response.IsSuccessStatusCode || !ShouldRetry(response.StatusCode))
{
return response;
}
await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
}
catch
{
if (attempt == maxRetries)
{
throw;
}
}
}
return response ?? throw new InvalidOperationException("Failed to execute request after retries");
}
private static bool ShouldRetry(HttpStatusCode statusCode)
{
return statusCode.IsServerError() || statusCode == HttpStatusCode.RequestTimeout;
}
}using PowerCSharp.Extensions.AspNetCore;
public class AppSettings
{
public string ApiUrl { get; set; } = "";
public int MaxRetries { get; set; } = 3;
public bool EnableLogging { get; set; } = true;
}
public class Startup
{
public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
{
// Load and validate settings
var settings = configuration.GetOptions<AppSettings>("AppSettings");
// Configure services based on settings
services.Configure<AppSettings>(configuration.GetSection("AppSettings"));
if (settings.EnableLogging)
{
services.AddLogging();
}
}
}PowerCSharp.Extensions.AspNetCore follows the same architectural principles as the PowerCSharp ecosystem:
Contributions are welcome! Please read our Contributing Guidelines for details.
When adding new ASP.NET Core specific extension methods:
This project is licensed under the MIT License - see the LICENSE file for details.
PowerCSharp.Extensions.AspNetCore - Making ASP.NET Core development more powerful, one extension at a time! 🚀
| Back | FazBrowse Home | New Git URL |