ASP.NET核心是否可以仅在开发模式下在控制器中配置动作?

时间:2019-06-07 13:41:46

标签: c# asp.net-core

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

2 个答案:

答案 0 :(得分:4)

这可以通过将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.
    }
}

如果您想更广泛地应用此功能,或者只是想分离出关注点,Daboul会在this answer(目前在下面发布)中通过操作过滤器说明如何做到这一点。

答案 1 :(得分:3)

一种不错的方法是创建一个undefined过滤器https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-2.2

过滤器如下所示:

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); } }

注释您的控制器操作