Asp.Net 独特的识别人 MVC 对于每个请求

在我们的网站上 MVC 5, 没有会话,我们需要得到 / 生成独特 ID 每个请求。 THhis 将被用作 ID 注册查询中的所有操作。

有没有办法分配 / 获取一个值请求以启用它?
已邀请:

窦买办

赞同来自:

将其添加到查询项的集合 odetocode.com/articles/111.aspx


Guid.NewGuid//


将生成唯一标识符。

http://msdn.microsoft.com/en-u ... .aspx

二哥

赞同来自:

这里有一些 extension methods, 我为此创建了哪个:


public static Guid GetId/this HttpContext ctx/ => new HttpContextWrapper/ctx/.GetId//;

public static Guid GetId/this HttpContextBase ctx/
{
const string key = "tq8OuyxHpDgkRg54klfpqg== /Request Id Key/";

if /ctx.Items.Contains/key//
return /Guid/ ctx.Items[key];

var mutex = string.Intern/$"{key}:{ctx.GetHashCode//}"/;
lock /mutex/
{
if /!ctx.Items.Contains/key//
ctx.Items[key] = Guid.NewGuid//;

return /Guid/ ctx.Items[key];
}
}


更新

@Luiso 谨此纪告,内部线路不会垃圾。 这是一个很好的时刻。 在一个非常下载的Web应用程序中,不经常处理应用程序池 /或者永远/, 这将是一个严重的问题。

幸运的是,最新版本 .NET 通过班级支持星式内
ConditionalWeakTable<tk,tv>

. 是什么提供了一种方便安全的内存来解决这个问题:


private static readonly ConditionalWeakTable<object, concurrentdictionary<string,="" object="">&gt;
Ephemerons = new ConditionalWeakTable<object, concurrentdictionary<string,="" object="">&gt;//;

public static Guid GetId/this HttpContext ctx/ =&gt; new HttpContextWrapper/ctx/.GetId//;

public static Guid GetId/this HttpContextBase ctx/
{
var dict = Ephemerons.GetOrCreateValue/ctx/;
var id = /Guid/dict.GetOrAdd/
"c53fd485-b6b6-4da9-9e9d-bf30500d510b",
_ =&gt; Guid.NewGuid///;
return id;
}


我的包裹 Overby.Extensions.Attachments 它有一种简化事物的扩展方法。


/// <summary>
/// Unique identifier for the object reference.
/// </summary>
public static Guid GetReferenceId/this object obj/ =&gt;
obj.GetOrSetAttached/// =&gt; Guid.NewGuid//, RefIdKey/;


使用此扩展方法,您只需打电话
httpContext.GetReferenceId//

.
</object,></object,></tk,tv>

诸葛浮云

赞同来自:

如果您需要一个值而无需实施类似的东西
Guid.NewGuid//

, 可能,
HttpContext

timestamp 将为您工作。


int requestId = System.Web.HttpContext.Current.Timestamp.Ticks;


一个蜱虫 - 这是一百纳秒或一百万秒。 10 000 在毫秒或 10 每秒数百万柚木。

然后,应根据其情况进行评估,因为有可能有两个请求落在同一时间滴度上。

要回复问题请先登录注册