私はActionDescriptor.UniqueIdを理解していません。これはアプリケーション内の型のようにユニークですか(ただし時間の経過とともに)か、すべての要求は新しい一意のIDを取得しますか?ASP.NET MVC:ActionDescriptor.UniqueIdはどのようにユニークですか?
異なるユーザーのように、同じコントローラメソッドで複数の呼び出しを区別するために使用できますか?
挨拶がたくさん!
フォルカー
私はActionDescriptor.UniqueIdを理解していません。これはアプリケーション内の型のようにユニークですか(ただし時間の経過とともに)か、すべての要求は新しい一意のIDを取得しますか?ASP.NET MVC:ActionDescriptor.UniqueIdはどのようにユニークですか?
異なるユーザーのように、同じコントローラメソッドで複数の呼び出しを区別するために使用できますか?
挨拶がたくさん!
フォルカー
私はUniqueId
財産と経験がなかったので、私は(あなたは、常にこのような質問のために開始すべきところです)MVCのソースを使用した研究のビットをしました。
ActionDescriptor
private string CreateUniqueId()
{
return DescriptorUtil.CreateUniqueId(GetType(), ControllerDescriptor, ActionName);
}
ActionDescriptor's
ユニークIDは、同様にそのControllerDescriptor's
ユニークなIDが含まれています。
ControllerDescriptor
private string CreateUniqueId()
{
return DescriptorUtil.CreateUniqueId(GetType(), ControllerName, ControllerType);
}
DescriptorUtil(内部クラス)
public static string CreateUniqueId(IEnumerable<object> parts)
{
// returns a unique string made up of the pieces passed in
StringBuilder builder = new StringBuilder();
foreach (object part in parts)
{
// We can special-case certain part types
MemberInfo memberInfo = part as MemberInfo;
if (memberInfo != null)
{
AppendPartToUniqueIdBuilder(builder, memberInfo.Module.ModuleVersionId);
AppendPartToUniqueIdBuilder(builder, memberInfo.MetadataToken);
continue;
}
IUniquelyIdentifiable uniquelyIdentifiable = part as IUniquelyIdentifiable;
if (uniquelyIdentifiable != null)
{
AppendPartToUniqueIdBuilder(builder, uniquelyIdentifiable.UniqueId);
continue;
}
AppendPartToUniqueIdBuilder(builder, part);
}
return builder.ToString();
}
あなたは値をタイプ情報及びコントローラ/アクション情報から作成されていることを見ることができます。アプリケーション内の他のすべてのアクションで一意でなければなりません。アクションによって受け入れられたパラメータ(存在する場合)は、IDに影響を与えることはありません。
異なるユーザーのように、同じ コントローラメソッドの複数のコールを区別するために使用できますか?
生成されたIDにユーザー情報が含まれていません。
OutputCacheAttribute
は、UniqueId
の消費者です。これは、値が - 複数のアクション間でユニークであるが - コール間で予測可能であることを強く示します。さもなければ、それはキャッシング目的のために役に立たないでしょう。
ありがとうございました!そこで、コールトラッキングでは、Guid.NewGuid()をHttpContextに追加するフィルタを挿入します。 – Volker