繁体   English   中英

使用端点路由和 MVC 时,如何从 Endpoint.RequestDelegate 获取 IActionContextAccessor?

[英]How can I get the IActionContextAccessor from the Endpoint.RequestDelegate when using Endpoint Routing and MVC?

我有一个 asp .net core 3.1 应用程序并配置了 MVC 和端点路由。 假设我有一个 Endpoint 对象(它不会总是与当前请求关联的 Endpoint),然后我有它的 RequestDelegate。 我想从这个 RequestDelegate 获取 IActionContextAccessor。 在以下示例中,当我处于调试模式时,我可以看到 _actionContextAccessor,因此我知道它在那里。

var endpoint = this.httpContextAccessor.HttpContext.GetEndpoint();

在此处输入图片说明

我确定你想要更多关于我正在做的事情的上下文,如果你愿意,我可以给你更多,但这个问题的要点是假设我有一个 Endpoint 对象并且我被配置为使用 MVC,怎么能我得到了 IActionContextAccessor?

更新

我最终想要得到的是动作参数。 只是输入参数的类型。 我们遵循一种输入模型约定,所以实际上我想要的是一种输入模型的类型。

要确定操作参数的类型,无需使用IActionContextAccessor或它公开的ActionContext属性。 一个Endpoint实例包含一组元数据:对于代表一个动作的端点,它包含一个ActionDescriptor的实例, ActionDescriptor ,它描述了一个动作。 它的一个属性是Parameters ,它公开了该操作的参数集。

综上所述,这里有一个示例,说明如何根据要求获取单个操作参数的类型:

var actionDescriptor = endpoint.Metadata.GetMetadata<ActionDescriptor>();

if (actionDescriptor != null)
{
    var actionParameterType = actionDescriptor.Parameters.SingleOrDefault()?.ParameterType;

    // ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM