ASP.NET – Come aggiungere i segreti dell'utente

ASP.NET – Come aggiungere i segreti dell'utente

Per aggiungere User Secrets in un progetto ASP.NET in Visual Studio, attenersi alla seguente procedura:

  • Fai clic con il pulsante destro del progetto e fai clic su Gestisci segreti utente .
  • Questo creerà e aprirà un file chiamato secrets.json.
  • Sostituisci le impostazioni di appsettings.json inserendole in secrets.json

Ad esempio, supponiamo che il tuo appsettings.json assomigli a questo:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ApiKey": "Prod1234"
}

Code language: JSON / JSON with Comments (json)

Vuoi sovrascrivere ApiKey. In secrets.json inseriresti questo:

{
  "ApiKey": "Dev1234"
}
Code language: JSON / JSON with Comments (json)

Ora, quando esegui la tua API web, quando vai a utilizzare "ApiKey" dalla configurazione, utilizzerà il valore di secrets.json invece di appsettings.json.

Esempio completo:aggiunta di segreti utente e passaggio dei valori a un controller

Diciamo che stai iniziando un nuovo progetto e devi aggiungere una classe Config che contiene due valori:ApiKey e ConnectionString. Devi passare questa configurazione ai tuoi controller e vuoi aggiungere User Secrets per sovrascrivere questi valori nel tuo ambiente di sviluppo.

In questo esempio, mostrerò come cablare tutto. Alla fine, vedrai che i tuoi segreti utente vengono utilizzati.

1 – Aggiungi una classe Config

Questa classe contiene semplicemente i valori di configurazione che vuoi passare ai controller.

public class Config
{
	public string ApiKey { get; set; }
	public string ConnectionString { get; set; }
}
Code language: C# (cs)

2 – In Startup.ConfigureServices registra l'oggetto Config e leggi i valori da Configuration

In Startup.ConfigureServices, inizializza l'oggetto Config.

Si noti che non c'è niente di speciale su come questo viene letto dall'oggetto Configurazione. Il framework ASP.NET è già predisposto per cercare User Secrets e fa tutto dietro le quinte per te.

public class Startup
{
	//other Startup methods
	
	public void ConfigureServices(IServiceCollection services)
	{
		//other stuff

		services.AddSingleton<Config>(new Config()
		{
			ConnectionString = Configuration.GetConnectionString("DefaultDB"),
			ApiKey = Configuration["ApiKey"]
		});
	}
}Code language: PHP (php)

3 – Aggiungi una classe Controller e la dipendenza inietta la classe Config

Aggiungi la classe Config come parametro del costruttore in un controller. Poiché hai registrato l'oggetto Config in Startup.ConfigureServices nel passaggio precedente, ogni volta che viene chiamato il costruttore di questo controller, passerà l'oggetto Config.

Questo è un controller di esempio e il metodo Get() riportato di seguito non è chiaramente realistico e ha solo lo scopo di mostrare che i valori del file User Secrets sono stati passati.

[ApiController]
[Route("[controller]")]
public class ExampleController : ControllerBase
{

	private readonly Config Config;
	public ExampleController(Config config)
	{
		Config = config;
	}

	[HttpGet]
	public string Get()
	{
		if (Config.ApiKey == "Dev1234")
		{
			return "It's using the user secrets!";
		}
		else
		{
			return "Something went wrong, it's not using the user secrets"
		}
	}
}
Code language: C# (cs)

Quando lo esegui, lo vedrai tornare:

It's using the user secrets!Code language: plaintext (plaintext)