1.508 messaggi dal 27 dicembre 2005
Sull' ultimo punto si può avere un esempio ?

Grazie.
11.886 messaggi dal 09 febbraio 2002
Contributi
Certamente. Il web.config è estendibile con altre sezioni di configurazione, come per esempio vedi in questo articolo di Daniele.

Il primo passo consiste nel creare una classe che definirà e riceverà i valori letti dalla nostra sezione personalizzata del web.config. Nel mio esempio ho aggiunto giusto le proprietà LoginUrl e Timeout (per nostalgia ho scelto i nomi che abbiamo usato fino a ieri con la forms authentication).
Imports Microsoft.Owin
Imports System.ComponentModel

Public Class AspNetIdentitySection
    Inherits ConfigurationSection

    <TypeConverter(GetType(ConvertitorePathString))> _
    <ConfigurationProperty("loginUrl", DefaultValue:="/Login", IsRequired:=False)> _
    Public Property LoginUrl() As PathString
        Get
            Return Me("loginUrl")
        End Get
        Set(ByVal value As PathString)
            Me("loginUrl") = value
        End Set
    End Property

    <TypeConverter(GetType(ConvertitoreTimeSpan))> _
    <ConfigurationProperty("timeout", DefaultValue:="20", IsRequired:=False)> _
    Public Property Timeout() As TimeSpan
        Get
            Return Me("timeout")
        End Get
        Set(ByVal value As TimeSpan)
            Me("timeout") = value
        End Set
    End Property

    Private Class ConvertitorePathString
        Inherits ConfigurationConverterBase

        Public Overrides Function CanConvertFrom(ctx As ITypeDescriptorContext, type As Type) As Boolean
            Return type.Equals(GetType(String))
        End Function

        Public Overrides Function ConvertFrom(context As ITypeDescriptorContext, culture As Globalization.CultureInfo, value As Object) As Object
            Return New PathString(value)
        End Function
    End Class

    Private Class ConvertitoreTimeSpan
        Inherits ConfigurationConverterBase

        Public Overrides Function CanConvertFrom(ctx As ITypeDescriptorContext, type As Type) As Boolean
            Return type.Equals(GetType(String))
        End Function

        Public Overrides Function ConvertFrom(context As ITypeDescriptorContext, culture As Globalization.CultureInfo, value As Object) As Object
            Return TimeSpan.FromMinutes(Integer.Parse(value))
        End Function
    End Class

End Class

Come vedi, le due proprietà sono - rispettivamente - di tipo PathString e TimeSpan. Le ho progettate così perché sono proprio i tipi che mi servono quando andrò ad assegnare i loro valori alle proprietà del CookieAuthenticationOptions.
Ho dovuto usare dei convertitori (ConvertitorePathString e ConvertitoreTimeSpan) perché i valori che mi arrivano dal web.config sono sostanzialmente delle stringhe e non sono implicitamente convertibili in quei tipi.

Ecco come ottengo un riferimento alla sezione personalizzata e ne uso i valori che mi arrivano dal web.config.
Dim identityConfiguration As AspNetIdentitySection = CType(ConfigurationManager.GetSection("aspNetIdentity"), AspNetIdentitySection)
'Questo è il punto nel file /App_Start/Startup.Auth.vb in cui configuro la cookie authentication
app.UseCookieAuthentication(New CookieAuthenticationOptions() With {
     [...omissis...]
    .LoginPath = identityConfiguration.LoginUrl,
    .ExpireTimeSpan = identityConfiguration.Timeout
})


Infine, nel web.config la sezione è registrata ed usata così:
<configuration>
  <configSections>
    <!-- qui la registro -->
    <section name="aspNetIdentity" type="MiaWebApp.AspNetIdentitySection, MiaWebApp" />
  </configSections>
  <!-- qui la uso -->
  <aspNetIdentity timeout="60" loginUrl="/Account/Login" />
  ...
</configuration>


ciao,
Moreno
Modificato da BrightSoul il 23 febbraio 2015 21.29 -

Enjoy learning and just keep making
1.508 messaggi dal 27 dicembre 2005
BrightSoul ha scritto:
Certamente. Il web.config è estendibile con altre sezioni di configurazione, come per esempio vedi in questo articolo di Daniele.

Il primo passo consiste nel creare una classe che definirà e riceverà i valori letti dalla nostra sezione personalizzata del web.config. Nel mio esempio ho aggiunto giusto le proprietà LoginUrl e Timeout (per nostalgia ho scelto i nomi che abbiamo usato fino a ieri con la forms authentication).
Imports Microsoft.Owin
Imports System.ComponentModel

Public Class AspNetIdentitySection
    Inherits ConfigurationSection

    <TypeConverter(GetType(ConvertitorePathString))> _
    <ConfigurationProperty("loginUrl", DefaultValue:="/Login", IsRequired:=False)> _
    Public Property LoginUrl() As PathString
        Get
            Return Me("loginUrl")
        End Get
        Set(ByVal value As PathString)
            Me("loginUrl") = value
        End Set
    End Property

    <TypeConverter(GetType(ConvertitoreTimeSpan))> _
    <ConfigurationProperty("timeout", DefaultValue:="20", IsRequired:=False)> _
    Public Property Timeout() As TimeSpan
        Get
            Return Me("timeout")
        End Get
        Set(ByVal value As TimeSpan)
            Me("timeout") = value
        End Set
    End Property

    Private Class ConvertitorePathString
        Inherits ConfigurationConverterBase

        Public Overrides Function CanConvertFrom(ctx As ITypeDescriptorContext, type As Type) As Boolean
            Return type.Equals(GetType(String))
        End Function

        Public Overrides Function ConvertFrom(context As ITypeDescriptorContext, culture As Globalization.CultureInfo, value As Object) As Object
            Return New PathString(value)
        End Function
    End Class

    Private Class ConvertitoreTimeSpan
        Inherits ConfigurationConverterBase

        Public Overrides Function CanConvertFrom(ctx As ITypeDescriptorContext, type As Type) As Boolean
            Return type.Equals(GetType(String))
        End Function

        Public Overrides Function ConvertFrom(context As ITypeDescriptorContext, culture As Globalization.CultureInfo, value As Object) As Object
            Return TimeSpan.FromMinutes(Integer.Parse(value))
        End Function
    End Class

End Class

Come vedi, le due proprietà sono - rispettivamente - di tipo PathString e TimeSpan. Le ho progettate così perché sono proprio i tipi che mi servono quando andrò ad assegnare i loro valori alle proprietà del CookieAuthenticationOptions.
Ho dovuto usare dei convertitori (ConvertitorePathString e ConvertitoreTimeSpan) perché i valori che mi arrivano dal web.config sono sostanzialmente delle stringhe e non sono implicitamente convertibili in quei tipi.

Ecco come ottengo un riferimento alla sezione personalizzata e ne uso i valori che mi arrivano dal web.config.
Dim identityConfiguration As AspNetIdentitySection = CType(ConfigurationManager.GetSection("aspNetIdentity"), AspNetIdentitySection)
'Questo è il punto nel file /App_Start/Startup.Auth.vb in cui configuro la cookie authentication
app.UseCookieAuthentication(New CookieAuthenticationOptions() With {
     [...omissis...]
    .LoginPath = identityConfiguration.LoginUrl,
    .ExpireTimeSpan = identityConfiguration.Timeout
})


Infine, nel web.config la sezione è registrata ed usata così:
<configuration>
  <configSections>
    <!-- qui la registro -->
    <section name="aspNetIdentity" type="MiaWebApp.AspNetIdentitySection, MiaWebApp" />
  </configSections>
  <!-- qui la uso -->
  <aspNetIdentity timeout="60" loginUrl="/Account/Login" />
  ...
</configuration>


ciao,
Moreno
Modificato da BrightSoul il 23 febbraio 2015 21.29 -


Wooow grazie qui c'è da studiare :)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.