来自route参数的ASP.Net Core 2 Controller依赖注入

eol*_*dre 5 c# asp.net-mvc routing asp.net-core-mvc

我在ASP.Net Core 2应用程序中使用属性库路由,并尝试根据路由将参数注入Controller.

当我使用该示例时,我收到一条消息的异常:"尝试激活(我的控制器类型)时无法解析类型'System.String'的服务"

[Route("api/agencies/{agencyId}/clients")]
public class ClientDataController : Controller
{
    public ClientDataController([FromRoute] string agencyId)
    {

    }

    [HttpGet]
    public void SomeAction()
    {
    }

}
Run Code Online (Sandbox Code Playgroud)

您是否无法在控制器构造函数中使用FromRoute属性?我有别的东西显然是错的吗?

JG3*_*JG3 0

FromRoute仅适用于操作级别,不适用于控制器级别。

在构造函数中获取路由参数的一种方法是将 an 传递IHttpContextAccessor给构造函数,然后使用GetRouteValue实际的方法HttpContext来获取参数值

[Route("api/agencies/{agencyId}/clients")]
public class ClientDataController : Controller
{
    private readonly agencyId;

    public ClientDataController(IHttpContextAccessor httpContextAccessor)
    {
        agencyId = (string)httpContextAccessor.HttpContext.GetRouteValue("agencyId");
    }

    [HttpGet]
    public void SomeAction()
    {
     //use agencyId here
    }

}
Run Code Online (Sandbox Code Playgroud)