Matthias Burger Matthias Burger -4 years ago 54
C# Question

Set the ApiExplorerSettingsAttributes value dynamically

Since a lot of attributes are designed by avoid unsealed attributes I'm searching for a solution for setting an attributes value (my first idea was to inherit the class and set a constructor what checks the web-config - not possible with a sealed class):

There's the

in namespace

I want the following API-action to get hidden in the case, a value in web-config is false:

<setting name="Hoster">

the action would look like this:

[HttpGet, Route("api/bdlg")]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(BdlgDataStorage))]
[ApiExplorerSettings(IgnoreApi = Properties.Settings.Default.Hoster)]
private async Task<BdlgDataStorage> GetBdlgStorageValues()
using (var context = new BdlgContext())
return context.BdlgDataStorages
.Where(w=>w.Isle > 56)

The important line is:

[ApiExplorerSettings(IgnoreApi = Properties.Settings.Default.Hoster)]

Here, I get a compiler-error:

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

Anyone got any idea, how I can set the value of IgnoreApi the same as the one from web-config?

Answer Source

You can't. Attributes are compiled statically into the assembly. They belong to the metadata of a member. You can't change attributes at run-time.

You have to find another way to influence the ApiExplorerSettings. This post seems to be what you are looking for: Dynamically Ignore WebAPI method on controller for api explorer documentation.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download