Asp.Net Core-Web服务的可配置属性路由

时间:2019-02-12 04:04:56

标签: c# asp.net-core asp.net-core-webapi

如何为以下 api 文本设置可配置的内容。因此,用户可以将其更改为appsettings.json文件中的任何名称。或者,我可以设置默认文本以放置在链接中,以便任何链接都包含该文本。

[Route(“ 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 :(得分:1)

ASP.NET Core 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。由于该类尚未实例化,因此无法调用实例方法。

我还没有测试过它的运行方式,但这应该可以帮助您入门。

作为旁注,您可能应该调查这是否会打开任何安全漏洞。


主题之外,也许有一种更好的方法可以通过Dependency Injection来检索配置,但是我已经使用了您提供的代码。