Several frequently used patterns in ASP.NET Core involve HttpContext, configuration access, session handling, and custom action filters. This section outliens practical implementations.
Encapsulate a Global Static HttpContext Helper
A wrapper class provides convenient access to the current HttpContext:
// HttpContextAccessor is registered via services.AddHttpContextAccessor()
public static class AppHttpContext
{
private static IHttpContextAccessor _accessor;
public static void Configure(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
public static string GetSessionString(string key) =>
_accessor.HttpContext?.Session.GetString(key);
}
Reading JSON Configuration
Access nested settings using colon-separated keys:
// Assume IConfiguration is injected
string connectionString = _config.GetSection("Database:ConnectionString").Value;
Working with Session
Add the session middleware and install Microsoft.AspNetCore.Http package:
// In ConfigureServices:
services.AddSession();
// In Configure:
app.UseSession();
// Retrieve a value
string qrCode = AppHttpContext.GetSessionString("qrcode_key");
Custom Action Filter
Implement a filter by inheriting from Attribute and IActionFilter:
public class AuthorizationFilter : Attribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
// Pre-execution logic
}
public void OnActionExecuted(ActionExecutedContext context)
{
// Post-execution logic
}
}
1. Getting the Current Controller Name
// Old MVC5 approach
// string controllerName = filterContext.ActionDescriptor.ActionName;
// .NET Core approach using ControllerType
string controllerName = context.Controller.GetType().Name;
2. Returning a View with Custom Data
var resultData = new ReturnMsg { Code = 500, Message = "Error" };
var viewData = new ViewDataDictionary<ReturnMsg>(
((Controller)context.Controller).ViewData, resultData);
context.Result = new ViewResult { ViewName = "error", ViewData = viewData };
3. Accessing Controller ViewBag
// Old style: filterContext.Controller.ViewBag.RightBtnView
if (context.Controller is Controller controller)
{
controller.ViewBag.RightBtnView = btnView;
}
4. Retrieving Action Praameters
// Using ActionArguments dictionary (key-value pairs)
if (context.ActionArguments.TryGetValue("zbid", out object zbidObj))
{
int zbid = Convert.ToInt32(zbidObj);
}
// Iterate parameter descriptors if only names are needed
foreach (var param in context.ActionDescriptor.Parameters)
{
string paramName = param.Name;
}
5. Accessing Request Parameters List
// Form data keys
List<string> formKeys = context.HttpContext.Request.Form.Keys.ToList();
// Query string as array of key-value pairs
KeyValuePair<string, StringValues>[] queryPairs = context.HttpContext.Request.Query.ToArray();
5.1 Getting a Specific Parameter by Key
// From form collection
int zbid = Convert.ToInt32(
context.HttpContext.Request.Form.FirstOrDefault(f => f.Key == "zbid").Value);
6. Retrieving the Referrer URL
string referer = context.HttpContext.Request.Headers["Referer"].FirstOrDefault();
// For MVC5: filterContext.HttpContext.Request.UrlReferrer.OriginalString;
7. Detecting an AJAX Request
public static bool IsAjaxRequest(this HttpRequest request)
{
return request.Headers.TryGetValue("X-Requested-With", out var value)
&& value == "XMLHttpRequest";
}
8. Resolving a Service from the Request Container
protected virtual T Resolve<T>() where T : class
{
return this.HttpContext.RequestServices.GetService(typeof(T)) as T;
}