Как создать URL внутри службы ac #? - PullRequest
0 голосов
/ 07 ноября 2019

Очень просто, я надеюсь. Я просто хочу сделать эквивалент

Url.Action("SomeAction", "SomeController", new { id = 3 });

Но внутри класса обслуживания. Не внутри класса контроллера или метода IActionResult

В обычном старом классе обслуживания. Из-за того, что в сервисном вызове есть все данные, которые я не хочу передавать в другую информацию, поэтому мой сервисный вызов хорош и чист. должно быть сделано.

Я пытался добавить эту зависимость

services.AddScoped<IUrlHelper>(x => x
            .GetRequiredService<IUrlHelperFactory>()
            .GetUrlHelper(x.GetRequiredService<IActionContextAccessor>().ActionContext));

В своем служебном вызове я использовал (DI) этот

public AdminService(..., IUrlHelper urlHelper)

, поэтому в своем методе обслуживания я могк этому

string editUrl = _urlHelper.Action("EditRole", "Admin", new { id = 0 });

, который избавился от всех красных извилин, но во время выполнения этот бит вызвал у меня проблему

            .GetUrlHelper(x.GetRequiredService<IActionContextAccessor>().ActionContext));

Ответы [ 3 ]

4 голосов
/ 07 ноября 2019

Интерфейс IUrlHelper можно внедрить в класс обслуживания.

public class ServiceClass
    {
        private readonly IActionContextAccessor _actionContextAccessor;
        private readonly IUrlHelperFactory _urlHelperFactory;

        public ServiceClass(IActionContextAccessor actionContextAccessor,
            IUrlHelperFactory urlHelperFactory,)
        {
            _actionContextAccessor = actionContextAccessor;
            _urlHelperFactory = urlHelperFactory;
        }

        public string CreateUrl()
        {
            var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext);
            string url = urlHelper.Action("SomeAction", "SomeController");

            return url;
        }
    }
0 голосов
/ 07 ноября 2019

@ SMM Я должен был добавить это в свой стартап, но в остальном работает, так что спасибо

services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddSingleton<IUrlHelper, UrlHelper>();
0 голосов
/ 07 ноября 2019

Url. Действие генерирует только URL. @ Url.Action ("actionName", "controllerName", new {id = id})

Html.ActionLink генерирует тег автоматически.

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