C# ASP.NET核心it';是否可以仅在开发模式下在控制器中配置操作?

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

在我的ASP.NET核心web应用程序中,我希望有一个仅在开发模式下运行的操作。在生产模式下,可能404错误就足够了。可以这样做吗?

这可以通过将
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))]注释控制器操作