В ядре ASP.NET можно настроить действие в контроллере только в режиме разработки? - PullRequest
2 голосов
/ 07 июня 2019

В моем основном веб-приложении ASP.NET я хочу, чтобы действие выполнялось только в режиме разработки.В производственном режиме, возможно, ошибка 404 будет достаточно хороша.Возможно ли это сделать?

Ответы [ 2 ]

4 голосов
/ 07 июня 2019

Этого можно достичь, введя 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 объясняет, как это сделать, с помощью фильтра действий в этом ответе (в настоящее время опубликовано ниже).

3 голосов
/ 07 июня 2019

Один хороший способ сделать это - создать DevOnlyActionFilter фильтр https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-2.2

Фильтр будет выглядеть так:

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))]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...