using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace WebApplication2
{
public class HeaderAttribute:ActionFilterAttribute
{
public string Name { get; set; }
public string Value { get; set; }
public override void OnActionExecuted(ActionExecutedContext context)
{
if (!string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Value))
{
context.HttpContext.Response.Headers.Add(Name, Value);
return;
}
}
}
}
//////////////////////////////////////////////////////////////////
//
// PROGRAMMING ASP.NET CORE
// Dino Esposito
//
// Ch04 - ASP.NET MVC Controllers
// Simple
//
using System;
using System.Globalization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Filters;
namespace Ch04.Simple.Common
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class CultureAttribute : ActionFilterAttribute
{
public string Name { get; set; }
public static string CookieName => "_Culture";
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var culture = Name;
if (string.IsNullOrEmpty(culture))
culture = GetSavedCultureOrDefault(filterContext.HttpContext.Request);
// Set culture on current thread
SetCultureOnThread(culture);
// Proceed as usual
base.OnActionExecuting(filterContext);
}
public static void SavePreferredCulture(HttpResponse response, string language,
int expireDays = 1)
{
var cookieOptions = new CookieOptions
{
Expires = DateTime.UtcNow.AddDays(expireDays)
};
response.Cookies.Append(CookieName, language, cookieOptions);
}
public static string GetSavedCultureOrDefault(HttpRequest httpRequestBase)
{
var culture = httpRequestBase.Cookies[CookieName] ?? CultureInfo.CurrentCulture.Name;
return culture;
}
private static void SetCultureOnThread(string language)
{
var cultureInfo = new CultureInfo(language);
CultureInfo.CurrentCulture = cultureInfo;
CultureInfo.CurrentUICulture = cultureInfo;
}
}
}
//////////////////////////////////////////////////////////////////
//
// PROGRAMMING ASP.NET CORE
// Dino Esposito
//
// Ch04 - ASP.NET MVC Controllers
// Simple
//
using Microsoft.AspNetCore.Mvc.Abstractions;
using Microsoft.AspNetCore.Mvc.ActionConstraints;
using Microsoft.AspNetCore.Routing;
namespace Ch04.Simple.Common
{
public class AjaxOnlyAttribute : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(RouteContext routeContext, ActionDescriptor action)
{
return routeContext.HttpContext.Request.IsAjaxRequest();
}
}
}
//////////////////////////////////////////////////////////////////
//
// PROGRAMMING ASP.NET CORE
// Dino Esposito
//
// Ch04 - ASP.NET MVC Controllers
// Simple
//
using System;
using Microsoft.AspNetCore.Http;
namespace Ch04.Simple.Common
{
public static class HttpRequestExtensions
{
public static bool IsAjaxRequest(this HttpRequest request)
{
if (request == null)
throw new ArgumentNullException(nameof(request));
if (request.Headers != null)
return request.Headers["X-Requested-With"] == "XMLHttpRequest";
return false;
}
}
}