Nasıl yapılır: Özel Beyan Oluşturma
Windows Communication Foundation'daki (WCF) Kimlik Modeli altyapısı, bu tür ve haklarla örnek oluşturmaya Claim yönelik yardımcı işlevlerle bir dizi yerleşik talep türü ve hakkı sağlar. Bu yerleşik talepler, WCF'nin varsayılan olarak desteklediği istemci kimlik bilgisi türlerinde bulunan bilgileri modellemek için tasarlanmıştır. Çoğu durumda yerleşik talepler yeterlidir; ancak bazı uygulamalar özel talepler gerektirebilir. Talep, talep türünden, talebin uygulandığı kaynak ve bu kaynak üzerinde onaylanan haklardan oluşur. Bu konu başlığında özel talebin nasıl oluşturulacağı açıklanmaktadır.
İlkel veri türünü temel alan özel bir talep oluşturmak için
Talep türünü, kaynak değerini ve hakkı oluşturucuya Claim(String, Object, String) geçirerek özel bir talep oluşturun.
Talep türü için benzersiz bir değere karar verin.
Talep türü benzersiz bir dize tanımlayıcısıdır. Talep türü için kullanılan dize tanımlayıcısının benzersiz olduğundan emin olmak özel talep tasarımcısının sorumluluğundadır. WCF tarafından tanımlanan talep türlerinin listesi için sınıfına ClaimTypes bakın.
Kaynak için temel veri türünü ve değerini seçin.
Kaynak bir nesnedir. Kaynağın CLR türü, veya Int32gibi String ilkel bir tür veya herhangi bir serileştirilebilir tür olabilir. Talepler WCF tarafından çeşitli noktalarda seri hale getirildiğinden kaynağın CLR türü serileştirilebilir olmalıdır. İlkel türler serileştirilebilir.
WCF tarafından tanımlanan bir hakkı veya özel bir sağ için benzersiz bir değer seçin.
Sağ, benzersiz bir dize tanımlayıcısıdır. WCF tarafından tanımlanan haklar sınıfında Rights tanımlanır.
Sağ için kullanılan dize tanımlayıcısının benzersiz olduğundan emin olmak özel talep tasarımcısının sorumluluğundadır.
Aşağıdaki kod örneği, adlı
Driver's License
ve sağdaki bir kaynak için talep türünehttp://example.org/claims/simplecustomclaim
sahip PossessProperty özel bir talep oluşturur.
// Create claim with custom claim type and primitive resource Claim c1 = new Claim ( "http://example.org/claims/simplecustomclaim", "Driver's License", Rights.PossessProperty);
' Create claim with custom claim type and primitive resource Dim c1 As New Claim("http://example.org/claims/simplecustomclaim", "Driver's License", Rights.PossessProperty)
İlkel olmayan bir veri türünü temel alan özel bir talep oluşturmak için
Talep türünü, kaynak değerini ve hakkı oluşturucuya Claim(String, Object, String) geçirerek özel bir talep oluşturun.
Talep türü için benzersiz bir değere karar verin.
Talep türü benzersiz bir dize tanımlayıcısıdır. Talep türü için kullanılan dize tanımlayıcısının benzersiz olduğundan emin olmak özel talep tasarımcısının sorumluluğundadır. WCF tarafından tanımlanan talep türlerinin listesi için sınıfına ClaimTypes bakın.
Kaynak için serileştirilebilir ilkel olmayan bir tür seçin veya tanımlayın.
Kaynak bir nesnedir. Talepler WCF tarafından çeşitli noktalarda seri hale getirildiğinden kaynağın CLR türü serileştirilebilir olmalıdır. temel türler zaten serileştirilebilir.
Yeni bir tür tanımlandığında sınıfına uygulayın DataContractAttribute . Ayrıca, talebin DataMemberAttribute bir parçası olarak seri hale getirmesi gereken yeni türün tüm üyelerine özniteliğini uygulayın.
Aşağıdaki kod örneği adlı
MyResourceType
özel bir kaynak türünü tanımlar.[DataContract(Name="MyResource", Namespace="http://example.org/resources")] public sealed class MyResourceType { // private members private string text; private int number; // Constructors public MyResourceType() { } public MyResourceType(string text, int number ) { this.text = text; this.number = number; } // Public properties [DataMember] public string Text { get { return this.text; } set { this.text = value; } } [DataMember] public int Number { get { return this.number; } set { this.number = value; } } }
<DataContract(Name:="MyResource", [Namespace]:="http://example.org/resources")> _ NotInheritable Public Class MyResourceType ' private members Private text_value As String Private number_value As Integer ' Constructors Public Sub New() End Sub Public Sub New(ByVal text As String, ByVal number As Integer) Me.text_value = text Me.number = number End Sub ' Public properties <DataMember()> _ Public Property Text() As String Get Return Me.text_value End Get Set Me.text_value = value End Set End Property <DataMember()> _ Public Property Number() As Integer Get Return Me.number_value End Get Set Me.number_value = value End Set End Property End Class
WCF tarafından tanımlanan bir hakkı veya özel bir sağ için benzersiz bir değer seçin.
Sağ, benzersiz bir dize tanımlayıcısıdır. WCF tarafından tanımlanan haklar sınıfında Rights tanımlanır.
Sağ için kullanılan dize tanımlayıcısının benzersiz olduğundan emin olmak özel talep tasarımcısının sorumluluğundadır.
Aşağıdaki kod örneği, talep türü , özel kaynak türü
http://example.org/claims/complexcustomclaim
MyResourceType
ve sağdaki özel PossessProperty bir talep oluşturur.// Create claim with custom claim type and structured resource type Claim c2 = new Claim ( "http://example.org/claims/complexcustomclaim", new MyResourceType ( "Martin", 38 ), Rights.PossessProperty);
' Create claim with custom claim type and structured resource type Dim c2 As New Claim("http://example.org/claims/complexcustomclaim", New MyResourceType("Martin", 38), Rights.PossessProperty)
Örnek
Aşağıdaki kod örneği, ilkel kaynak türüne sahip bir özel talep ve ilkel olmayan kaynak türüne sahip bir özel talep oluşturmayı gösterir.
using System;
using System.IdentityModel.Claims;
using System.Runtime.Serialization;
namespace Samples
{
[DataContract(Name="MyResource", Namespace="http://example.org/resources")]
public sealed class MyResourceType
{
// private members
private string text;
private int number;
// Constructors
public MyResourceType()
{
}
public MyResourceType(string text, int number )
{
this.text = text;
this.number = number;
}
// Public properties
[DataMember]
public string Text { get { return this.text; } set { this.text = value; } }
[DataMember]
public int Number { get { return this.number; } set { this.number = value; } }
}
class Program
{
public static void Main()
{
// Create claim with custom claim type and primitive resource
Claim c1 = new Claim ( "http://example.org/claims/simplecustomclaim", "Driver's License", Rights.PossessProperty);
// Create claim with custom claim type and structured resource type
Claim c2 = new Claim ( "http://example.org/claims/complexcustomclaim", new MyResourceType ( "Martin", 38 ), Rights.PossessProperty);
// Do something with claims
}
}
}
Imports System.IdentityModel.Claims
Imports System.Runtime.Serialization
Imports System.Security.Permissions
<DataContract(Name:="MyResource", [Namespace]:="http://example.org/resources")> _
NotInheritable Public Class MyResourceType
' private members
Private text_value As String
Private number_value As Integer
' Constructors
Public Sub New()
End Sub
Public Sub New(ByVal text As String, ByVal number As Integer)
Me.text_value = text
Me.number = number
End Sub
' Public properties
<DataMember()> _
Public Property Text() As String
Get
Return Me.text_value
End Get
Set
Me.text_value = value
End Set
End Property
<DataMember()> _
Public Property Number() As Integer
Get
Return Me.number_value
End Get
Set
Me.number_value = value
End Set
End Property
End Class
Class Program
Public Shared Sub Main()
' Create claim with custom claim type and primitive resource
Dim c1 As New Claim("http://example.org/claims/simplecustomclaim", "Driver's License", Rights.PossessProperty)
' Create claim with custom claim type and structured resource type
Dim c2 As New Claim("http://example.org/claims/complexcustomclaim", New MyResourceType("Martin", 38), Rights.PossessProperty)
End Sub
End Class
' Do something with claims