【发布时间】:2015-03-10 17:21:11
【问题描述】:
我的 API 中的数据服务层需要 httpcontext 中的请求信息,我阅读了这个 question,他们说我应该使用 ActionContext 而不是 HttpContext.Current(在 MVC6 中停止)。
第一种方法是通过覆盖这个方法来设置控制器内部的数据:
public void OnActionExecuting(ActionExecutingContext context)
{
var routeData = context.RouteData;
var httpContext = context.HttpContext;
...
}
或者通过注入服务层来使用DI
public MyService(IContextAccessor<ActionContext> contextAccessor)
{
_httpContext = contextAccessor.Value.HttpContext;
_routeData = contextAccessor.Value.RouteData;
}
但我不确定下面列出的两行代码是否是执行 DI 的正确方法
services.AddTransient<IContextAccessor<ActionContext>,ContextAccessor>();
services.AddTransient<IContextAccessor<ActionContext>>();
当我这样做时,我得到了这个错误。
尝试激活时无法解析类型“Microsoft.AspNet.Mvc.ActionContext”的服务
更新 project.json 网络项目
"DIMultiTenan.Infrastructure": "",
"DIMultiTenan.MongoImplementation": "",
"Microsoft.AspNet.Server.IIS": "1.0.0-beta3",
"Microsoft.AspNet.Mvc": "6.0.0-beta3",
"Microsoft.AspNet.StaticFiles": "1.0.0-beta3",
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta3"
【问题讨论】:
-
删除第一行并重试
-
抱歉造成混乱,但我当时尝试了一行代码
-
你试过用 AddScopped 代替 AddTransient 吗?
-
顺便问一下,您使用的是 Beta3 还是最新的开发代码。
-
查看更新问题 我为 web 项目添加了 project.json 文件。我正在使用 vs2015 CTP 6
标签: c# asp.net-core asp.net-core-mvc