HttpContext.Items.Add("Flag","FlagValue")用戶進行身份驗證后,我需要在請求中添加一個標志。我已經使用單獨的方法完成了類似的任務,ActionFilterAttribute但想通過擴展或覆寫AuthorizeAttribute.
我知道這可以通過創建自定義授權屬性來完成,并且我在網上查看了很多示例,但我發現的示例似乎不適用于 ASP.NET Core 6 MVC。
我開始做一些簡單的事情,看看它是否通過了身份驗證
[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
public class AuthorizeUserAttribute : AuthorizeAttribute
{
public AuthorizeUserAttribute()
{
Log.Information("Authenticated?"); // stops here
}
public AuthorizeUserAttribute(string policy) : base(policy)
{
Log.Information("Authenticated?"); // doesn't stop here
}
}
并且正在通過身份驗證并檢查我創建的策略。
[CheckIsAppLocked]
[HttpGet("connections")]
[AuthorizeUser(Policy = "App_User")]
public ActionResult<Packet<List<SFTP_Conn_Info>>> GetConnInfo()
{
return OK(HomeLogic.GetConnInfo());
}
我的問題是我無法進入HttpContext課堂。我不知道我可以使用哪些方法公開AuthorizeAttribute,我什至嘗試使用HttpContextAccessor該類但它回傳 null(但與操作過濾器一起使用時不為 null)
我可以呼叫動作過濾器OnActionExecuting(ActionExecutingContext actionContext)并參考 actionContext.HttpContext 類。
我猜我需要在我的 AuthorizeAttribute 中定義一種方法,但不確定 .NET 6 支持哪個方法。
幫助表示贊賞!
uj5u.com熱心網友回復:
如果您IActionFilter在定義的屬性上實作介面,您應該能夠HttpContext從您的操作的宣告屬性中訪問您所提到的。
uj5u.com熱心網友回復:
[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
public class AuthorizeUserAttribute : AuthorizeAttribute, IActionFilter {
public void OnActionExecuted(ActionExecutedContext context) {}
public void OnActionExecuting(ActionExecutingContext actionContext) {
actionContext.HttpContext.Items.Add("Flag", GetFlagValue());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/483892.html
標籤:C# asp.net 核心 授权 asp.net-core-6.0
上一篇:ASP.NETCoreBlazorHybrid作為單檔案應用程式
下一篇:如果資料存在,Linq選擇列
