我使用下面的类来控制我的 api 方法请求,并设置 BaseController 类的一些属性以在方法中常用。
这个来自 Asp.Net Mvc Web Api
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using System.Web.Http.Controllers;
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class AuthUserAttribute : AuthorizeAttribute
{
private string Action { get; set; }
public AuthUserAttribute(string action)
{
this.Action = action;
}
public override void OnAuthorization(HttpActionContext actionContext)
{
BaseController baseController = httpContext.ControllerContext.Controller as BaseController;
baseController.someCommenProperty = someValue;
}
}
但是当我尝试在 Asp.Net Mvc Core Api 中实现相同的结构时
我无法到达初始化的控制器实例。
有什么办法可以让我得到这个实例吗?
使用 Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Primitives;
using System;
using System.Linq;
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class AuthUserAttribute : AuthorizeAttribute, IAuthorizationFilter
{
private string Action { get; set; }
public AuthUserAttribute(string action)
{
this.Action = action;
}
public void OnAuthorization(AuthorizationFilterContext context)
{
// how to get controller instance from context
}
}
您可以使用context.ActionDescriptor
得到Type控制器上的信息。
控制器object在授权检查时可能根本没有实例化。
您还可以实施IActionFilter
并使用其中的控制器实例
public void OnActionExecuting(ActionExecutingContext context)
and
public void OnActionExecuted(ActionExecutingContext context)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)