使用 IOptions 服务时未调用 mvc6 控制器操作
mvc6 controller action not called when using IOptions service
在一个 aspnet5/mvc6 项目中,我使用配置生成器从 appsettings.json:
读取设置
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
services.AddMvc();
}
但是,当我尝试从控制器访问服务时,没有调用操作:
public IActionResult Index(IOptions<AppSettings> appSettings)
{
return View();
}
如果我删除 appSettings 参数,则会正确调用该操作。
我没有收到错误消息。我需要额外的包裹吗?目前我正在使用以下依赖项:
"dependencies": {
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final"
}
就像 haim770 评论的那样,我需要在控制器构造函数中注入 IOption。
public class HomeController : Controller
{
public HomeController(IOptions<AppSettings> appSettings)
{
//logic
}
}
如果你想通过动作参数注入你的选项,你需要用[FromServices]
:
装饰你的选项参数
public IActionResult Index([FromServices] IOptions<AppSettings> appSettings)
{
return View();
}
虽然肯定支持,但通常最好使用构造函数注入,正如 haim770 所建议的那样。
在一个 aspnet5/mvc6 项目中,我使用配置生成器从 appsettings.json:
读取设置public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
services.AddMvc();
}
但是,当我尝试从控制器访问服务时,没有调用操作:
public IActionResult Index(IOptions<AppSettings> appSettings)
{
return View();
}
如果我删除 appSettings 参数,则会正确调用该操作。 我没有收到错误消息。我需要额外的包裹吗?目前我正在使用以下依赖项:
"dependencies": {
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final"
}
就像 haim770 评论的那样,我需要在控制器构造函数中注入 IOption。
public class HomeController : Controller
{
public HomeController(IOptions<AppSettings> appSettings)
{
//logic
}
}
如果你想通过动作参数注入你的选项,你需要用[FromServices]
:
public IActionResult Index([FromServices] IOptions<AppSettings> appSettings)
{
return View();
}
虽然肯定支持,但通常最好使用构造函数注入,正如 haim770 所建议的那样。