小编use*_*erx的帖子

检查是否在集成管道模式下

是否可以检查我们的代码是否在集成管道模式下执行?

有一些ASP.NET类属性只能在集成管道模式下工作,如果有办法测试我们的代码是否在该环境中执行,我想避免引发异常.

asp.net iis iis-7 integrated-pipeline-mode

19
推荐指数
1
解决办法
3530
查看次数

在使用触摸和鼠标的设备上聆听mousedown和touchstart(例如Surface)

因此,我在处理Microsoft Surface的Web应用程序时遇到了一个有趣的问题.

我想在用户与DOM元素交互时添加事件监听器.现在我能做到:

if ('ontouchstart' in document.documentElement) {
  //Attach code for touch event listeners
  document.addEventListener("touchstart" myFunc, false);
} else {
  //Attach code for mouse event listeners
  document.addEventListener("mousedown" myFunc, false);
}
Run Code Online (Sandbox Code Playgroud)

如果设备没有鼠标输入,这个问题很简单,上面的代码就可以了.但Surface(和许多新的Windows 8计算机)同时具有触摸和鼠标输入.因此,上述代码仅在用户触摸设备时才有效.永远不会附加鼠标事件侦听器.

那么我想,好吧,我可以这样做:

if ('ontouchstart' in document.documentElement) {
  //Attach code for touch event listeners
  document.addEventListener("touchstart" myFunc, false);
}
//Always attach code for mouse event listeners
document.addEventListener("mousedown" myFunc, false);
Run Code Online (Sandbox Code Playgroud)

不支持触摸的设备不会附加事件,但使用触摸的设备将注册其处理程序.但问题是myFunc()在触摸设备上会被调用两次:

  1. myFunc() 当"touchstart"被提出时会触发
  2. 因为触摸浏览器通常会经历循环touchstart - > touchmove - > touchend - > mousedown - > mousemove - > mouseup …

javascript touch windows-8

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

C#中的结构修改是否会影响非托管内存?

我的直觉反应是否定的,因为托管和非托管内存是截然不同的,但我不确定.NET Framework是否在幕后操作Marshaling.

我认为发生的是:从我的非托管DLL获取结构时,它与使调用获取IntPtr然后使用它和Marshal类将结构复制到托管内存(以及对托管中的结构所做的更改)相同记忆不要起泡).

我似乎无法在MSDN上的任何地方找到此文档.任何链接将不胜感激.

这是我的代码的样子:

[DllImport("mydll.dll", BestFitMapping=false, CharSet=CharSet.Ansi)]
private static extern int GetStruct(ref MyStruct s);

[StructLayout(LayoutKind.Sequential, Pack=0)]
struct MyStruct
{
     public int    Field1;
     public IntPtr Field2;
}

public void DoSomething()
{
      MyStruct s = new MyStruct();
      GetStruct(ref s);

      s.Field1 = 100; //does unmanaged memory now have 100 in Field1 as well?
      s.Field2 = IntPtr.Zero; //does unmanaged memory now have a NULL pointer in field Field2 as well?
}
Run Code Online (Sandbox Code Playgroud)

.net c# pinvoke struct

9
推荐指数
2
解决办法
579
查看次数

检测输入(type = text)元素中的文本是否超出FireFox中的边界

有没有办法检测输入(type = text)元素的内容(值)是否超过其大小?

在Internet Explorer中,scrollWidth属性将大于style.width此时的属性.但是在Firefox中,scrollWidth总是等于style.width并且是一个已知的错误(https://bugzilla.mozilla.org/show_bug.cgi?id=343143),也许不是bug,因为Mozilla根本不认为输入元素是"可滚动的" ,但仍然.根据这种观点,Firefox的textarea元素scrollWidth在内容溢出边界时正确设置属性.

目前,我唯一的想法是:(a)使用textarea元素,并以某种方式将其限制为单行输入或(b)在输入的每个keyup事件中,将内容复制到类似形状的div元素并查看其scrollWidth属性.

在FF中有没有更好的方法来实现这一目标?

html javascript firefox dom input

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

Safe Process.Start实现不受信任的URL字符串

我的目标是在用户默认浏览器中安全地打开网页.此网页的URL被视为"不受信任"(将其视为使用此软件打开的文档中的链接,但该文档可能来自任何地方,其中的链接可能是恶意的)

我想避免有人将"C:\ Windows\malicious_code.exe"作为URL传递出去

我目前的想法是做这样的事情:

Uri url = new Uri(urlString, UriKind.Absolute);
if( url.Scheme == Uri.UriSchemeHttp || url.Scheme == Uri.UriSchemeHttps )
{
   Process.Start(url.AbsoluteUri);
}
Run Code Online (Sandbox Code Playgroud)

我忘了我的'urlString'可能包含的任何其他东西,这使得这很危险(例如,一个新的行字符,允许有人潜入第二个进程在URL之后启动或可能执行以http开头的相对可执行文件)?

我很确定这两种情况都由此处理(因为我不相信Process.Start允许你像在BATCH文件中那样启动两个进程,这应该只允许以http:或https:开头的字符串.是有效的网址)

在C#中有更好的方法吗?

c# security url process

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

这个查询在SQL Server中是安全的吗?

我有这个SQL更新查询:

UPDATE table1 
SET table1.field1 = 1 
WHERE table1.id NOT IN (SELECT table2.table1id FROM table2);
Run Code Online (Sandbox Code Playgroud)

应用程序的其他部分可以向table2添加记录,使用字段table1id引用table1.

这里的目标是从table1中删除未被table2引用的记录.

SQL Server是否使用此类查询自动锁定table2,以便在执行此查询时无法将新记录添加到table2?

我也考虑过:

UPDATE table1 
SET field1 = 1 
WHERE 0 = (SELECT COUNT(*) FROM table2 WHERE table1.id = table2.table1id);
Run Code Online (Sandbox Code Playgroud)

这看起来可能更安全,但速度要慢得多(因为在table1的每一行上都会调用SELECT而不是只为NOT IN调用一行)

sql t-sql sql-server

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