小编Kel*_*ron的帖子

Asp.net - 用于存储字典的缓存与静态变量

我正在建立一个包含许多部门和类别的网上商店.它们存储在我们的数据库中并经常访问.

我们正在使用URL重写,因此几乎商店中的每个请求都会生成查找.我们还需要经常迭代数据以生成主存储和部门页面的菜单.

这些信息不会经常更改,因此我认为我应该将数据库加载到字典中以加速信息检索.

我知道标准做法是将数据加载到应用程序缓存中,但是我假设在缓存期间出现了某种级别的序列化,对于大型数据结构,我认为开销会很大.

我对此的冲动是将字典放在一个相关类中的静态变量中.但是我想在此获得一些输入输入.我认为这种方法会更快吗?这是一种可怕的做法吗?有没有更好的方法让我失踪?

我似乎无法找到关于此的更多信息,我真的很感激您可以分享的任何信息.谢谢!

c# asp.net caching

17
推荐指数
1
解决办法
1万
查看次数

保护基于Cookie的身份验证

我目前正在考虑我的一个Web应用程序,我希望提供一些有关提高安全性的建议.

我会注意到该应用程序在ASP.net中,当前的实现阻止我使用集成身份验证.这也绝不是一个需要高安全性的应用程序,我只是喜欢我的基础.

在过去,我已经存储了id和令牌.令牌是用户ID的哈希值+用户的Salt(重用auth信息中的值)当用户访问站点时,将根据令牌检查ID并相应地进行刷新.

我觉得这里有个大洞.从理论上讲,如果有人掌握了盐值,他们需要做的就是猜测哈希算法并迭代可能的ID,直到他们进入.我不认为这会发生,但它似乎仍然是一个错误.

有关如何正确确认用户cookie未被更改的任何建议?

security cookies

14
推荐指数
2
解决办法
2万
查看次数

ASP.Net URL编码

我正在ASP.net中实现URL重写,我的URL导致我的问题世界.

URL是从部门和类别的数据库生成的.我希望员工能够使用适当的特殊字符向数据库添加项目,而不会破坏站点.

我在构造URL之前编码数据.

有几个问题......

  1. IIS在到达.net之前对URL进行解码,因此无法正确解析其中包含"/"的任何内容.
  2. ASP.net在某些页面中使用"〜"无效的网址感到困惑
  3. 我从内置测试服务器迁移到我的本地IIS服务器(XP机器),任何包含编码&(%26)的URL都会给我一个"错误请求"错误.
  4. UrlEncode留下一些破碎的字符,如'.'

我确实有两个关于这个主题的其他相关帖子,当时我只看到小问题不是上游的大问题.我发现了一些解决"错误请求"问题的注册表技巧,但我将部署到共享托管环境,使其无用.我也知道这是一个解决某些安全问题的方法,因此我不想在不知道我正在打开哪些蠕虫的情况下绕过它.

而不是试图强制.net传递原始URL,或覆盖IIS设置,我想首先制作真正安全的URL.

我会注意到我已经尝试过AntiXss.URLEncode,HttpUtility.URLEncode,URI.EscapeDataString.我甚至尝试过像双URLEncodng这样的蠢事.是否有一个实用程序可以满足我的需求,或者我真的需要自己动手.我甚至考虑做一些Hacky,比如用一个不寻常的字符串替换%.最终结果应至少是可读的,这首先是使用URL重写的重点.

很抱歉很长的帖子 - 我只是想确保我已经包含了所有必要的细节.我似乎无法找到任何相关信息,这似乎是一个常见的问题 - 所以也许我错过了一些大事.感谢您的帮助,以及对长篇解释的耐心!


为清晰起见编辑:

当我说从数据库构建网址时,我的意思是目录结构是从我的数据库中的部门和类别构建的.

一些示例URLS -

Mystore/Refrigeration/Bar + Fridge.aspx
Mystore/Cooking + Equipment.aspx
Mystore/Kitchen/Cutting + Boards.asxpx

当我使用像"Beverage&Bar"或"Pastry/Decorating"这样的部门来构建我的URL时会出现问题.尽管首先编码,但这些都会导致上述问题.

我的处理程序已经实现并且工作正常,除了特殊的字符编码问题.

c# asp.net iis url-rewriting url-encoding

7
推荐指数
1
解决办法
1万
查看次数

IE9中的白屏问题 - 删除iframe

我想知道是否有人可以给我一些洞察我一直在努力的一个非常奇怪的IE9问题.

我正在完成一个工作站点的制作 - 它在ff/chrome/ie7/ie8中运行良好,没有脚本错误.

在IE9上,应用程序的最后一步导致整个选项卡被屏幕显示,没有脚本错误或警告.(将文档模式更改为ie8将解决问题,但显然不适合生产)

不幸的是,该网站非常复杂,有大量的ajax和页内脚本,所以我无法轻易地发布相关代码.我更想弄清楚如何诊断这个.

我检查了IE错误日志,它们都是空的.Web开发人员工具什么都没说.该网站没有使用任何插件(Flash/Silverlight,Ect.)只是javascript w/jQuery.

在失败的步骤周围有一个PDF显示在iframe中 - 但是在上一步(使用相同的方法)中显示几乎相同的pdf而没有问题.代码在调用jquery UI窗口时失败,但我似乎无法获得确切的行.

如果有人知道如何进一步诊断这一点,我真的很感激.我可以继续寻找虫子,但我以前从未见过这种行为,只是不确定我在寻找什么.

javascript jquery-ui-dialog internet-explorer-9

7
推荐指数
1
解决办法
2022
查看次数

跳过/丢失的Lambda超载

我正在运行一些非常简单的测试代码来查看linq查询中常量的影响,而我找不到重载...

这篇MSDN文章特别提到了skip/take的lambda重载,但我似乎找不到它.

实体框架4,5和6性能注意事项的 4.2节:

"特别注意在进行分页时使用Skip和Take.在EF6中,这些方法有一个lambda重载,有效地使缓存的查询计划可重用,因为EF可以捕获传递给这些方法的变量并将它们转换为SQL参数."

他们遵循以下代码示例:

var customers = context.Customers.OrderBy(c => c.LastName);
for (var i = 0; i < count; ++i)
{
    var currentCustomer = customers.Skip(() => i).FirstOrDefault();
    ProcessCustomer(currentCustomer);
}
Run Code Online (Sandbox Code Playgroud)

我的测试代码:

for(int i = 0; i<100; i++)
{
    var result = dc.Products
                 //.Select(p => p.Name)
                   .OrderBy(p => p.Name)
                   .Skip(() => i)
                   .ToList();
}
Run Code Online (Sandbox Code Playgroud)

错误:无法将lambda表达式转换为类型'int',因为它不是委托类型

我是否在阅读失败,或者是否存在包含重载扩展方法的地方?我在使用EF 6.1.1.

c# linq entity-framework-6

7
推荐指数
1
解决办法
2112
查看次数

MVC 5无效的JSON原语

我试图在MVC5中用ajax编写自动完成,但无论我尝试什么,我都会得到错误无效的JSON原语.当我手动输入url localhost:5088/GetData?inpt = [query]我能看到返回json.

根据我的在线理解,我给出了"data:"参数错误.我尝试将它们放入""但它没有用.

我的控制器:

  public  JsonResult GetData(string inpt)
        {
            try
            {
                var node = //some values here , cause its too long I deleted it 
                foreach (var node in q)
                {
                    string scity = node.Attribute("CityName").Value.ToUpper(new CultureInfo("tr-TR", false));
                    string ccity = node.Attribute("CityCode").Value;
                    string ccode = node.Attribute("CountryCode").Value;
                    if (ccity != oldcity)
                    {
                        result.Add(new HavaAlani { SehirAdi = scity, HavaAlaniKodu = ccity, HavaAlaniAdi = scity + ", " + ccode, Sehirmi = true });
                        oldcity = ccity;
                    }
                    result.Add(new HavaAlani { …
Run Code Online (Sandbox Code Playgroud)

ajax json autocomplete asp.net-mvc-5

6
推荐指数
1
解决办法
1万
查看次数

如何为VS2015创建自定义编辑器?

我正在尝试构建一个visual studio扩展.我的项目是从"VSIX Project"模板创建的.

根据文档,应该有一个自定义编辑器的模板,但我没有找到它并且无法谷歌搜索它.除了SDK之外还有什么我想念的,或者我误读了文档?

https://msdn.microsoft.com/en-us/library/bb166460.aspx

使用Visual Studio包模板创建VSPackage

1.使用Visual Studio包模板创建项目.有关使用此模板的更多信息,请参阅使用菜单命令创建扩展.

2.选择"自定义编辑器"选项并单击"下一步".将显示"编辑器选项"页面.

3.在"编辑器名称"框中键入编辑器的名称.在"文件扩展名"框中键入要与编辑器关联的文件扩展名.您的编辑器可用于具有此扩展名的文件.文件扩展名仅针对Visual Studio注册,而不是针对Windows注册.在"默认文件名"框中键入使用编辑器创建的新文档的默认文件名.

4.单击"完成"以在指定的文件夹中创建VSPackage.

可用模板

visual-studio vs-extensibility vsix visual-studio-2015

6
推荐指数
1
解决办法
1339
查看次数

如何在MVC6中使用标准类库?

有没有一种在MVC6中包含标准类库的合理方便的方法?我认为标准的添加引用对话框可以创建一个包装器,但我没有运气.将其作为nuget包发布对于正在进行的开发调试来说似乎非常不方便.

如果没有包装器,是否有内置的方法将标准类库转换为新类型?

asp.net-core-mvc visual-studio-2015 asp.net-core

5
推荐指数
1
解决办法
2827
查看次数

C#访问具有继承的修饰符

我想在属性上有一个具有不同访问修饰符的对象的多个版本

例如,我可能有一个用户类 -

public abstract class UserInfo
{
    internal UserInfo()
    {
    }
    public virtual int ID { get; set; }
    public virtual string Password { internal get; set; }
    public virtual string Username { get; set; }
}

public class ReadUserInfo : UserInfo 
{
    internal ReadUserInfo()
    {
    }
    override public int ID { get; internal set; }
    override internal string Password { get; set; }
    override public string Username { get; internal set; }
}

public class NewUserInfo : UserInfo …
Run Code Online (Sandbox Code Playgroud)

c# inheritance access-modifiers

4
推荐指数
1
解决办法
8381
查看次数

带有ReaderWriterLockSlim的C#字典

我对多线程非常陌生,由于某种原因,这门课给我带来的麻烦比应该多.

我在ASP.net缓存中设置了一个字典 - 它经常被查询单个对象,偶尔枚举,并且很少写入.我会注意到字典数据几乎从未改变过,我打算让它每天过期,并在离开缓存时从数据库重建回调.

我相信只要没有编写字典,枚举和密钥访问就是安全的.我在想一个基于ReaderWriterLockSlim的包装类是要走的路,但我在几点上模糊了.

如果我使用Lock,我相信我可以锁定令牌或我正在保护的实际对象.我没有看到如何使用ReaderWriter Lock做类似的事情.我是否认为我的包装器的多个实例无法正确锁定,因为ReaderWriterLocks不在彼此的范围内?

编写这样的包装器的最佳实践是什么?将其构建为静态几乎看起来是多余的,因为主要对象由缓存维护.单身人士似乎不赞成,我担心上面提到的个别实例的范围界定问题.

我已经看到了一些类似包装器的实现,但我无法回答这些问题.我只是想确保我对我正在做的事情有一个坚定的把握,而不是削减和粘贴我的方式.非常感谢您的帮助!


**编辑:希望这是我想要找到的更清晰的总结 - **

1.我是否认为锁不会影响基础数据,并且其范围与任何其他变量一样?

举个例子,我可以说以下 -

MyWrapperClass 
{
    ReaderWriterLockSlim lck = new ReaderWriterLockSlim();
    Do stuff with this lock on the underlying cached dictionary object...
}

MyWrapperClass wrapA = new MyWrapperClass();
MyWrapperClass wrapB = new MyWrapperClass();
Run Code Online (Sandbox Code Playgroud)

我是否认为wrapA锁和wrapB锁不会交互,并且如果wrapA和wrapB都尝试操作它将是不安全的?

2.如果是这种情况,"共享"锁定数据的最佳实践方法是什么?

这是一个Asp.net应用程序 - 会有多个页面需要访问数据,这就是为什么我这样做的原因.确保各种包装使用相同锁的最佳做法是什么?我的包装器应该是所有线程都使用的静态或单例,如果不是更优雅的选择吗?

c# asp.net caching dictionary thread-safety

2
推荐指数
1
解决办法
4308
查看次数

为什么BCrypt生成的哈希是非确定性的

我过去曾使用过许多不同的哈希算法,但我认为它们都是确定性的.

我刚刚切换了一些代码来使用BCrypt.Net,我不得不承认,当我的所有比较测试都失败时,我完全被困住了.

在我的测试中查找错误的尴尬时间后,我意识到我的假设哈希是确定性的是完全错误的.有一种有效的验证方法,它很容易修复代码,但我想了解更好的内容.

它是在内部腌制价值还是其他事情在继续?

在此输入图像描述

  • 请注意我在我的真实代码中腌制这个 - 这只是一个测试

security bcrypt.net

2
推荐指数
1
解决办法
937
查看次数

重复访问者调用的编译器优化

我最近发现,对于某些类型的财务计算,以下模式更容易遵循和测试,尤其是在我们可能需要从计算的各个阶段获取数字的情况下.

public class nonsensical_calculator
{ 

   ...

    double _rate;
    int _term;
    int _days;

    double monthlyRate { get { return _rate / 12; }}

    public double days { get { return (1 - i); }}
    double ar   { get { return (1+ days) /(monthlyRate  * days)
    double bleh { get { return Math.Pow(ar - days, _term)
    public double raar { get { return bleh * ar/2 * ar / days; }}
    ....
}
Run Code Online (Sandbox Code Playgroud)

显然,这通常导致在给定公式内多次调用相同的访问器.我很好奇编译器是否足够聪明,可以优化掉这些重复的调用而不会有状态的中间变化,或者这种风格是否会导致性能下降.

进一步阅读建议总是受到赞赏

c# compiler-construction optimization accessor

0
推荐指数
2
解决办法
1132
查看次数