Common .NET Core HttpContext Operations and Action Filter Techniques

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;
}

Tags: ASP.NET Core HttpContext ActionFilter middleware Session

Posted on Sat, 11 Jul 2026 17:34:23 +0000 by Slippy