В MVC У меня есть служба, зарегистрированном в Startup
я использую для проверки действия так:MVC ActionFilterAttribute - получить значение от действия
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
//services.AddCaching();
services.AddSession();
services.AddMvc();
services.AddScoped<SessionDetails>();
//services.AddTransient<IAppSettings, AppSettings>();
services.AddSingleton(Configuration);
services.AddSingleton(MobileUnitOfWork);
//services.AddTransient<IMobileUnitOfWork, MobileUnitOfWork>();
services.AddScoped<RoleItemKey>();
//Custom Attributes
services.AddScoped<SiteSetting>();
services.AddScoped<ValidationService>();
//services.AddScoped<RequestHelper>();
//services.AddEntityFramework()
// .AddSqlServer()
// .AddDbContext<QuotesAppContext>(options => options.UseSqlServer(Configuration["Data:ConnectionString"]));
}
Затем плюхнулся на что требует проверки доступа.
Контроллер:
[ServiceFilter(typeof(ValidationService))]
public IActionResult MyDetails()
{
ControllerContext.RouteData.Values.Add("RoleItemKey", "MOBILE_MYHOLIDAYS_PAGE");
ControllerContext.RouteData.DataTokens.Add("RoleItemKey", "MOBILE_MYHOLIDAYS_PAGE");
HttpContext.Session.SetString("RoleItemKey", "MOBILE_MYHOLIDAYS_PAGE");
ViewBag.RoleItemKey = RoleItemKey.MOBILE_MYHOLIDAYS_PAGE;
return View("~/Views/User/MyDetails.cshtml", GetDetailsModel());
}
Все, что мне нужно сделать, это передать значение от исполняющего действия, которое будет прочитано ActionFilterAttribute. Теперь, поскольку мне нужно и хочу инициализировать службу в Startup.cs
, я не могу найти способ передать значение - пожалуйста, скажите мне, что я пропускаю.
Как вы можете видеть, я попытался использовать routeata, информацию о сеансе ... но независимо от того, что установлено в действительном действии, которое я не могу прочитать в ActionFilterAttribute
, он просто возвращает null для всего этого.
Может ли кто-нибудь сказать мне эту настройку, как я могу прочитать значение из выполняемого действия?
Услуги:
public class ValidationService : ActionFilterAttribute
{
private IConfiguration _config;
private IMobileUnitOfWork _services;
private Controller _controller;
private ActionExecutingContext _context;
private readonly IHttpContextAccessor _contextAccessor;
private ISession _session => _context.HttpContext.Session;
public string Moons;
public ValidationService(IConfiguration config, IMobileUnitOfWork unitOfWork)
{
_config = config;
_services = unitOfWork;
}
/// <summary>
/// Ensures the page is validated before being directed
/// </summary>
/// <param name="context"></param>
public override void OnActionExecuting(ActionExecutingContext context)
{
var controller = context.Controller as Controller;
var moo = controller.HttpContext.Session.GetString("CascadeSessionToken");
var mos = controller.HttpContext.Session.GetString("RoleItemKey");
_context = context;
_controller = controller;
_controller.ViewBag.LoggedIn = true;
base.OnActionExecuting(context);
Validate("");
}
Вы используете ASP.NET Core? –
Да, его там что-то особенное для этого? – Monolithcode