在我的ASP.NET核心Web应用程序中,我想要一个仅在开发模式下运行的操作。在生产模式下,可能会出现404错误就足够了。可以这样做吗?
答案 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);
}
}