Я не имел опыта с UniqueId
собственности, так что я сделал несколько исследований с использованием источника MVC (который является, где вы всегда должны начать на вопрос, как это).
ActionDescriptor
private string CreateUniqueId()
{
return DescriptorUtil.CreateUniqueId(GetType(), ControllerDescriptor, ActionName);
}
ActionDescriptor's
уникальный идентификатор содержит свой ControllerDescriptor's
уникальный идентификатор, а также.
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();
}
Вы можете видеть, что значение создается из информации о типе и информации контроллер/действие. Он должен быть уникальным среди всех других действий в приложении. Не кажется, что параметры (если они есть), принятые действием, влияют на идентификатор.
Могу ли я использовать его для разграничения между несколькими вызовами от того же метода , как у разных пользователей?
Информация о пользователе не указана в генерируемом идентификаторе.
OutputCacheAttribute
является потребителем UniqueId
. Это указывает на то, что значение - хотя и уникальное для разных действий - предсказуемо между вызовами. В противном случае это было бы бесполезно для кеширования.
Спасибо большое! Таким образом, для отслеживания звонков я вставляю фильтр, который добавляет Guid.NewGuid() в HttpContext. – Volker