我正在開發基于 ASP.NET Core 6 的 Web 應用程式。為了避免在我的控制器中撰寫大量冗余代碼,我實作了一個BaseController所有控制器都繼承自的類。在那個類中,我重寫了OnActionExecutionAsync運行代碼的方法,否則這些代碼在每個控制器中都是多余的。在這段代碼中,我需要訪問兩個引數,否則我必須通過它的引數傳遞給每個控制器操作,如下所示:
public async Task<ActionResult> ExampleAction([FromQuery(Name = "argument1")] Guid? argument1, [FromQuery(Name = "argument2")] Guid? argument2)
只要我在每個動作中保留這些引數,我就可以在OnActionExecutionAsync方法中輕松訪問它們。但是,我不想這樣做,因為它需要我將引數添加到每個控制器操作,而我什至不需要它們。現在我遇到的問題是,當我從控制器操作中洗掉引數時,我無法再通過方法訪問context.ActionArguments它們OnActionExecutionAsync。
在這種情況下,有什么辦法我仍然可以訪問引數嗎?我已經在 SO 上找到了這個非常相似的問題,但建議使用的解決方案actionContext.ControllerContext.RouteData.Values["tenant"]在我的情況下不起作用。ControllerContextASP.NET Core 6中根本沒有,并且context.RouteData.Values似乎不包含我正在尋找的論點。
uj5u.com熱心網友回復:
您可以使用 訪問查詢字串值HttpContext.Request.Query。這是一個例子:
var tenantValues = context.HttpContext.Request.Query["tenant"];
這里的型別tenantValues是StringValues,代表一個或多個值。如果您知道只會提供一個值,則可以將其視為集合并使用[0]or First(),例如,或者將其大小寫為string。
uj5u.com熱心網友回復:
您可以使用( 的祖先 ) 的HttpContext屬性來訪問請求查詢字串值:ActionContextActionExecutingContext
public override Task OnActionExecutionAsync(ActionExecutingContext actionContext, ActionExecutionDelegate next)
{
StringValues values = actionContext.HttpContext.Request.Query["tenant"];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410254.html
標籤:
