我正在考虑使用 Guid 作为网站的随机匿名访问者标识符(存储为 cookie 客户端大小和数据库服务器端),我想要一种生成 Guids 的加密方式(以便尽量减少碰撞的机会)。
为了记录,Guid 中有 16 个字节(或 128 位)。
这就是我的想法:
/// <summary>
/// Generate a cryptographically strong Guid
/// </summary>
/// <returns>a random Guid</returns>
private Guid GenerateNewGuid()
{
    byte[] guidBytes = new byte[16]; // Guids are 16 bytes long
    RNGCryptoServiceProvider random = new RNGCryptoServiceProvider();
    random.GetBytes(guidBytes);
    return new Guid(guidBytes);
}
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
编辑: 这将用于两个目的,访问者的唯一 ID 和购买的交易 ID(这将简要地作为查看/更新敏感信息所需的令牌)。
在本地系统上,是否有(合理)保证创建目录结构来写文件的地方?我正在寻找一个不需要管理权限进行权限更改的解决方案?
经过一番研究,我看到了这个答案,找到了当前用户的桌面文件夹.我可以使用它,但还有其他选择吗?
综合研究:
在一些命名混乱后,我的团队决定重命名一些项目和项目中所有现有代码文件的命名空间.(在Visual Studio 2012中)
我们改变了:
在完成所有这些之后,IIS 8.0 Express仍然坚持使用旧项目名称作为站点名称(在本地调试时).我怎样才能解决这个问题?
编辑: 真正的问题是:IIS 8.0 Express如何确定网站名称?
这是一个剪辑自(.之一)网站的.csproj文件
<ProjectExtensions>
  <VisualStudio>
    <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
      <WebProjectProperties>
        <UseIIS>True</UseIIS>
        <AutoAssignPort>True</AutoAssignPort>
        <DevelopmentServerPort>52143</DevelopmentServerPort>
        <DevelopmentServerVPath>/</DevelopmentServerVPath>
        <IISUrl>http://localhost:53177/</IISUrl>
        <NTLMAuthentication>False</NTLMAuthentication>
        <UseCustomServer>False</UseCustomServer>
        <CustomServerUrl>
        </CustomServerUrl>
        <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
      </WebProjectProperties>
    </FlavorProperties>
  </VisualStudio>
</ProjectExtensions>
Run Code Online (Sandbox Code Playgroud)
...而且没有任何网站名称.
我刚刚接触到 Ninject.Mvc3 NuGet 包,我想知道创建的对象持续多长时间。
InRequestScope很容易理解:只要网络服务器正在处理特定的网络请求,在此范围内创建的每个对象都会存在。(为了迂腐,对象的生命与对象一样长HttpContext.Current)
但是这些InSingletonScope物体能持续多久呢?文档说,只要 Ninject 内核本身这样做——它包含在NinjectWebCommon静态类中。到目前为止,我所做的最好的猜测是,只要服务器运行 web 应用程序,内核就会一直存在——只要服务器启动,直到应用程序在 IIS 中手动重新启动或更新,对象都在范围内。
我很好奇,因为我很想拥有一些包含只读数据字典的数据访问器作为单例范围,我想知道这是一个好主意,还是计划中的内存泄漏。
我正在为一个网站构建一个缓存服务,我想提供一个公共接口,它可以采用一个Func<TKey,TValue>或Func<TKey,Task<TValue>>一个可以被服务调用的方法来缓存未命中.
我最终在处理这两个委托类型时重复代码.有没有办法巩固?我特别担心'Func'方法不是线程安全的,并且不适合包装在'Task.Run'中.
这是我的代码:
public interface ICacheServiceEngine
{
    Task<CacheResult<TValue>> TryGetValueAsync<TValue>(string key);
    Task<CacheResult<TValue>> 
        TryGetValueAsync<TKey,TValue>(TKey key, Func<TKey,string> keyFunc);
    Task<TValue> GetValueAsync<TValue>(string key, 
        Func<string, TValue> valueSourceFunc);
    Task<TValue> GetValueAsync<TKey,TValue>(TKey key, 
        Func<TKey,string> keyFunc, Func<TKey, TValue> valueSourceFunc);
    Task<TValue> GetValueAsync<TValue>(string key, 
        Func<string, Task<TValue>> valueSourceFuncAsync);
    Task<TValue> GetValueAsync<TKey, TValue>(TKey key, 
        Func<TKey,string> keyFunc, Func<TKey, Task<TValue>> valueSourceFuncAsync);
}
public interface ICacheServiceDataAccessor
{
    Task<CacheResult<TValue>> TryGetAsync<TValue>(string key);
    Task PutAsync<TValue>(string key , TValue result);
}
public class CacheServiceEngine : ICacheServiceEngine
{
    private ICacheServiceDataAccessor cacheDataAccessor;
    public CacheServiceEngine(ICacheServiceDataAccessor cacheDataAccessor)
    {   
        // add guard
        this.cacheDataAccessor …Run Code Online (Sandbox Code Playgroud) c# ×5
.net-4.5 ×1
async-await ×1
func ×1
guid ×1
iis-express ×1
ninject ×1
project ×1
random ×1