C# ASP.NET核心it';是否可以仅在开发模式下在控制器中配置操作?
在我的ASP.NET核心web应用程序中,我希望有一个仅在开发模式下运行的操作。在生产模式下,可能404错误就足够了。可以这样做吗?这可以通过将C# ASP.NET核心it';是否可以仅在开发模式下在控制器中配置操作?,c#,asp.net-core,C#,Asp.net Core,在我的ASP.NET核心web应用程序中,我希望有一个仅在开发模式下运行的操作。在生产模式下,可能404错误就足够了。可以这样做吗?这可以通过将IHostingEnvironment注入控制器并在操作本身内部使用其IsDevelopment()方法来实现。下面是一个完整的示例,当在开发环境以外的任何环境中运行时返回404: public class SomeController : Controller { private readonly IHostingEnvironment hos
IHostingEnvironment
注入控制器并在操作本身内部使用其IsDevelopment()
方法来实现。下面是一个完整的示例,当在开发环境以外的任何环境中运行时返回404:
public class SomeController : Controller
{
private readonly IHostingEnvironment hostingEnvironment;
public SomeController(IHostingEnvironment hostingEnvironment)
{
this.hostingEnvironment = hostingEnvironment;
}
public IActionResult SomeAction()
{
if (!hostingEnvironment.IsDevelopment())
return NotFound();
// Otherwise, return something else for Development.
}
}
对于ASP.NET Core 3.0+,使用IWebHostEnvironment
或IHostEnvironment
代替IHostingEnvironment
如果您想更全面地应用此功能,或者您只是想分离关注点,Daboul将解释如何使用中的操作筛选器来实现此功能。一个很好的方法是创建一个
DevOnlyActionFilter
筛选器
过滤器的外观如下所示:
public class DevOnlyActionFilter : ActionFilterAttribute
{
private IHostingEnvironment HostingEnv { get; }
public DevOnlyActionFilter(IHostingEnvironment hostingEnv)
{
HostingEnv = hostingEnv;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
if(!HostingEnv.IsDevelopment())
{
context.Result = new NotFoundResult();
return;
}
base.OnActionExecuting(context);
}
}
并使用[TypeFilter(typeof(DevOnlyActionFilter))]注释控制器操作