小编Rad*_*094的帖子

从客户端检测到潜在危险的Request.Form值

每当用户在我的Web应用程序中发布包含<>在页面中的内容时,我都会抛出此异常.

我不想进入关于抛出异常或崩溃整个Web应用程序的聪明性的讨论,因为有人在文本框中输入了一个字符,但我正在寻找一种优雅的方法来处理这个问题.

捕获异常并显示

发生错误请返回并重新输入整个表单,但这次请不要使用<

对我来说似乎不够专业.

禁用post validation(validateRequest="false")肯定会避免此错误,但它会使页面容易受到许多攻击.

理想情况:当发回包含HTML限制字符的回发时,Form集合中的已发布值将自动进行HTML编码.所以.Text我的文本框的属性将是something & lt; html & gt;

有没有办法可以从处理程序中执行此操作?

asp.net validation asp.net-mvc html-encode request.form

1437
推荐指数
32
解决办法
94万
查看次数

CustomErrors mode ="Off"

每次我将webapp上传到提供商时都会出错.由于customErrors模式,我看到的只是默认的"运行时错误"消息,指示我关闭customErrors以查看有关错误的更多信息.

恼怒,我已将我的web.config设置为如下所示:

<?xml version="1.0"?>
<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

而且,我得到的只是愚蠢的远程错误页面,没有任何有用的信息.我还能做些什么来关闭自定义错误!

asp.net

248
推荐指数
10
解决办法
49万
查看次数

WSACancelBlockingCall异常

好吧,我的代码抛出一个奇怪的例外,这个例子一直困扰着我多年.

System.Net.Sockets.SocketException: A blocking operation was interrupted by a call to WSACancelBlockingCall
   at System.Net.Sockets.Socket.Accept()
   at System.Net.Sockets.TcpListener.AcceptTcpClient()
Run Code Online (Sandbox Code Playgroud)

MSDN对此并不十分有用:http://msdn.microsoft.com/en-us/library/ms741547(VS.85).aspx,我甚至不知道如何开始对此进行故障排除.它每天只抛出4到5次,而且从不在我们的测试环境中.仅限生产站点和所有生产站点.

我发现有很多帖子询问这个异常,但没有真正明确的答案是什么导致它,以及如何处理或阻止它.

代码在单独的后台线程中运行,该方法启动:

public virtual void Startup()
    {
     TcpListener serverSocket= new TcpListener(new IPEndPoint(bindAddress, port));    
        serverSocket.Start();
Run Code Online (Sandbox Code Playgroud)

然后我运行一个循环,将所有新连接作为作业放在一个单独的线程池中.由于应用程序架构,它变得更加复杂,但基本上:

   while (( socket = serverSocket.AcceptTcpClient()) !=null) //Funny exception here
    {
         connectionHandler = new ConnectionHandler(socket, mappingStrategy);
         pool.AddJob(connectionHandler);
    }
  }
Run Code Online (Sandbox Code Playgroud)

从那里开始,pool它拥有自己的线程,分别处理它自己的线程中的每个工作.

我的理解是AcceptTcpClient()是一个阻塞调用,并且不知何故winsock告诉线程停止阻塞并继续执行..但为什么呢?那我该怎么办?抓住异常并忽略它?


好吧,我确实认为其他一些线程正在关闭套接字,但它肯定不是来自我的代码.我想知道的是:这个套接字是由连接客户端(在套接字的另一端)关闭还是由我的服务器关闭.因为就在这时,每当发生此异常时,它会关闭我的侦听端口,从而有效地关闭我的服务.如果这是从远程位置完成的,那么这是一个主要问题.

或者,这可能只是IIS服务器关闭我的应用程序,从而取消所有我的后台线程和阻止方法?

c# sockets

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

GLSL中的顶点着色器属性映射

我正在使用GLSL着色器编写一个小型渲染引擎:

每个网格(井,子网格)都有一些顶点流(例如位置,法线,纹理,切线等)到一个大的VBO和一个MaterialID中.

每个材质都有一组纹理和属性(例如镜面反射颜色,漫反射颜色,颜色纹理,法线贴图等)

然后我有一个GLSL着色器,它的制服和属性.让我们说:

uniform vec3 DiffuseColor;
uniform sampler2D NormalMapTexture;
attribute vec3 Position;
attribute vec2 TexCoord;
Run Code Online (Sandbox Code Playgroud)

我试图为GLSL着色器设计一种方法来定义属性和制服的流映射(语义),然后将顶点流绑定到适当的属性.

对网格说法的内容:"将您的位置流放在属性"位置"中,将您的tex坐标放在"TexCoord"中.还将材质的漫反射颜色放在"DiffuseColor"中,将材质的第二个纹理放在"NormalMapTexture"中

目前我正在使用硬编码的名称作为属性(即顶点pos始终是"位置"等)并检查每个统一和属性名称以了解着色器使用它的内容.

我想我正在寻找一种创建"顶点声明"的方法,但也包括制服和纹理.

所以我只是想知道人们如何在大型渲染引擎中做到这一点.

编辑:

回顾建议的方法:

1.属性/统一语义由变量名称给出 (我现在正在做什么)为每个可能的属性使用预定义的名称.GLSL绑定器将查询每个属性的名称并基于该属性链接顶点数组.变量名称:

//global static variable

semantics (name,normalize,offset) = {"Position",false,0} {"Normal",true,1},{"TextureUV,false,2}

 ...when linking
for (int index=0;index<allAttribs;index++)
{
   glGetActiveAttrib(program,index,bufSize,length,size[index],type[index],name);      
   semantics[index]= GetSemanticsFromGlobalHardCodedList(name);
} 
... when binding vertex arrays for render
 for (int index=0;index<allAttribs;index++)
{
    glVertexAttribPointer(index,size[index],type[index],semantics[index]->normalized,bufferStride,semantics[index]->offset);

}  
Run Code Online (Sandbox Code Playgroud)

2.每个语义的预定义位置

GLSL绑定器将始终将顶点数组绑定到相同的位置.着色器可以使用相应的名称进行匹配.(这看起来非常类似于方法1,但除非我误解,否则这意味着绑定所有可用的顶点数据,即使着色器不使用它)

.. when linking the program...
glBindAttribLocation(prog, 0, "mg_Position");
glBindAttribLocation(prog, 1, "mg_Color");
glBindAttribLocation(prog, 2, "mg_Normal");
Run Code Online (Sandbox Code Playgroud)

3.来自Material,Engine globals,Renderer和Mesh的可用属性的字典

维护活动材质,引擎全局,当前渲染器和当前场景节点发布的可用属性列表.

例如:

 Material has (uniformName,value) = …
Run Code Online (Sandbox Code Playgroud)

opengl glsl rendering-engine

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

如何使用js eval返回值?

我需要评估从服务器传递的自定义函数作为字符串.这是我得到的复杂json的一部分,但无论如何,我似乎需要一些东西:

var customJSfromServer = "return 2+2+2;"
var evalValue = eval(customJSfromServer);
alert(evalValue) ;// should be "6";
Run Code Online (Sandbox Code Playgroud)

显然这不符合我的预期.我能用这种方式做到吗?

javascript

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

在C#中锁定空闲堆栈和队列

有没有人知道是否有可用于.NET的无锁容器库?

最好的东西被证明比我们在.NET中使用的Synchronized包装器更有效.

我在.NET上发现了一些文章,但没有一篇文章指出任何速度基准测试,也没有激发他们对可靠性的信心.

谢谢

.net multithreading synchronization lock-free data-structures

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

从CSV导入SQL批量导入

我需要将一个大型CSV文件导入SQL服务器.我正在使用这个:

BULK 
INSERT CSVTest
        FROM 'c:\csvfile.txt'
            WITH
    (
                FIELDTERMINATOR = ',',
                ROWTERMINATOR = '\n'
    )
GO
Run Code Online (Sandbox Code Playgroud)

问题是我的所有字段都被引号("")包围,所以一行实际上看起来像:

"1","","2","","sometimes with comma , inside", "" 
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式批量导入它们并告诉SQL使用引号作为字段分隔符吗?

编辑:使用'","'作为分隔符的问题,如在建议的示例中那样:大多数示例的作用是,它们是否导入数据,包括第一个"在第一列和最后一个"在最后,然后他们继续把它剥离出来.我的第一个(也是最后一个)列是datetime,不允许将"20080902"导入为datetime.

从我一直在阅读的内容来看,我认为FORMATFILE是可行的方式,但文档(包括MSDN)非常缺乏帮助.

sql t-sql sql-server bulkinsert

23
推荐指数
3
解决办法
4万
查看次数

StackTrace文件名未知

在我使用StackTrace的代码中发生了一些奇怪的事情.这几乎就像没有加载调试信息一样......但是我在DEBUG构建中运行它..pdb文件在bin目录中是最新的并且是最新的.我已经严重失去了思想:

public class TraceHelper
{
    private static IDictionary<string,int> TraceDictionary = new Dictionary<string,int>();

    public TraceHelper(int duration)
    {

         ...
        TraceDictionary[InternalGetCallingLocation()]+=duration;
         ... 

    }
    public static string InternalGetCallingLocation ()
    {
          var trace = new System.Diagnostics.StackTrace();
          var frames = trace.GetFrames();
          var filename = frames[1].GetFileName(); //<<-- this always returns null
          return frames[0].ToString(); //this returns:
          //  "InternalGetCallingLocation at offset 99 in file:line:column <filename unknown>:0:0"
    }
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net reflection stack-trace

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

SQL group by day,显示每天的订单

我有一个SQL 2005表,我们称之为Orders,格式如下:

OrderID, OrderDate,  OrderAmount
1,       25/11/2008, 10
2,       25/11/2008, 2
3,       30/1002008, 5
Run Code Online (Sandbox Code Playgroud)

然后我需要生成一个报告表,显示过去7天内每天的订购金额:

Day,        OrderCount, OrderAmount
25/11/2008, 2,          12
26/11/2008, 0,          0 
27/11/2008, 0,          0 
28/11/2008, 0,          0
29/11/2008, 0,          0
30/11/2008, 1,          5
Run Code Online (Sandbox Code Playgroud)

通常会产生这种情况的SQL查询:

select count(*), sum(OrderAmount)
    from Orders
    where OrderDate>getdate()-7
    group by datepart(day,OrderDate)
Run Code Online (Sandbox Code Playgroud)

有一个问题是它会跳过没有订单的日子:

Day,        OrderCount, OrderAmount
25/11/2008, 2,          12
30/11/2008, 1,          5
Run Code Online (Sandbox Code Playgroud)

通常情况下,我会使用计数表和外部联接来修复此行,但我真的在寻找更简单或更有效的解决方案.对于报表查询来说,似乎有一个常见的要求,即已经有一些优雅的解决方案可用.

所以:1.这个结果可以从一个简单的查询中获得而不使用计数表吗?

2.如果不是,我们可以动态创建这个计数表(可靠)(我可以使用CTE创建计数表,但递归堆栈将我限制为100行)?

sql aggregate sql-server-2005

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

如何从没有JS的链接HTTP POST

如果JS被禁用,任何从链接提交POST请求的方法?

Ideeas到目前为止(没有一个完美)

  1. 使用<input type ='submit>,但我需要一个链接而不是一个按钮
  2. 使用<a href='' onclick='form.submit()'>但这依赖于JS
  3. 再次使用<input type ='image'> ... ..不是真正的链接

对于没有JS的浏览器,我需要一个回退方法,而这些"按钮"的区域对于按钮或图像来说太小了

html forms form-submit

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