Asp.Net Core - Настраиваемый атрибут атрибута для веб-сервиса - PullRequest
0 голосов
/ 12 февраля 2019

Как настроить настраиваемый текст для api ниже.Таким образом, пользователь может изменить его на любое имя из файла appsettings.json.Или я могу установить текст по умолчанию для вставки ссылки, поэтому любая ссылка будет иметь этот текст.

[Маршрут (" api / [controller]")]

var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();

// [Route("config["ApiName"]/[controller]")]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/values/5
    [HttpGet("{id}")]
    public ActionResult<string> Get(int id)
    {
        return "value";
    }
}

1 Ответ

0 голосов
/ 18 февраля 2019

Ядро ASP.NET RouteAttribute само по себе мало что делает.Вы можете попробовать унаследовать его и прочитать вашу конфигурацию внутри.В .NET Core более 1 RouteAttribute классов, поэтому убедитесь, что вы наследуете тот же, который вы использовали в своем примере.

Это будет выглядеть примерно так:

public class MyDynamicRouteAttribute : RouteAttribute
{
    public MyDynamicRouteAttribute(string template) : super(FillTemplate(template)) {}

    private static string FillTemplate(string template)
    {
        var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();

        return template.Replace(<do what you need to do>);
    }
}

Тогда вы будете использовать его так, как вы описали:

[MyDynamicRoute("{ApiName}/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    ...
}

Обратите внимание, что FillTemplate() объявлен static.Поскольку класс еще не был создан, вы не можете вызвать метод экземпляра.

Я не проверял, как он работает, но это должно помочь вам начать работу.

В качестве примечания, вам, вероятно, следует выяснить, не открывают ли это какие-либо дыры в безопасности.


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

...