小编Sep*_*eph的帖子

通过动态LINQ可以注入吗?

使用Dynamic LINQ库(链接),是否容易受到注入?和(如果是的话)如何防止这种情况?

安全注意事项(实体框架)的一些背景知识:

LINQ to Entities注入攻击:

尽管在LINQ to Entities中可以进行查询组合,但它是通过对象模型API执行的.与实体SQL查询不同,LINQ to Entities查询不是使用字符串操作或连接组成的,并且它们不易受传统SQL注入攻击的影响.

由于动态SQL是使用字符串组成的,这意味着它可能容易受到注入向量的影响吗?或者LINQ to SQL会根据Dynamic LINQ库中的基础数据类型自动处理参数化值吗?

或者它是完全安全的,因为动态查询将在内存中执行而不是在SQL上执行(从而否定SQL索引的任何好处)?

我一直在努力理解DynamicLibrary.cs代码,但我确信我可以很容易地忽略一些东西.

由于这个问题是关于动态LINQ库本身,这个问题可以被认为适用于两者linq-to-sqllinq-to-entities(尽管上面引用了实体框架).

c# linq linq-to-entities dynamic-linq linq-to-sql

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

linq/lambda中的多行foreach循环

我正在寻找一种方法来更改以下代码:

foreach (Contact _contact in contacts)
{
    _contact.ID = 0;
    _contact.GroupID = 0;
    _contact.CompanyID = 0;
}
Run Code Online (Sandbox Code Playgroud)

我想使用LINQ/lambda将其更改为类似于:

contacts.ForEach(c => c.ID = 0; c.GroupID = 0; c.CompanyID = 0);
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用.除了通过编写函数在一行中执行此操作之外,有没有办法在linq foreach中执行多行操作?

linq foreach lambda

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

从string构造用于嵌套属性的LambdaExpression

我试图从属性的名称在运行时为嵌套属性创建一个lambda表达式.基本上我正在尝试创建由以下指定的lambda表达式:

var expression = CreateExpression<Foo, object>(foo => foo.myBar.name);

private static Expression CreateExpression<TEntity, TReturn>(Expression<Func<TEntity, TReturn>> expression)
{
    return (expression as Expression);
}
Run Code Online (Sandbox Code Playgroud)

随着课程:

class Foo
{
    public Bar myBar { get; set; }
}
class Bar
{
    public string name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是我得到的只是Foo字符串的类型"myBar.name"

如果它是一个普通的属性,例如只需要该值,"myBar"那么我可以使用以下内容:

private static LambdaExpression GetPropertyAccessLambda(Type type, string propertyName)
{
    ParameterExpression odataItParameter = Expression.Parameter(type, "$it");
    MemberExpression propertyAccess = Expression.Property(odataItParameter, propertyName);
    return Expression.Lambda(propertyAccess, odataItParameter);
}
Run Code Online (Sandbox Code Playgroud)

但是,此代码不适用于嵌套属性,我不知道如何创建LambdaExpression来完成工作foo.myBar.name.

我认为这将是这样的:

GetExpression(Expression.Call(GetExpression(Foo, "myBar"), "name")) …
Run Code Online (Sandbox Code Playgroud)

.net c# linq lambda expression-trees

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

将Git与Visual Source Safe 6.0一起使用

对不起,这个可怕的,可怕的问题..但是我没办法不使用VSS.

我希望能够在使用Visual Source Safe 6时在本地使用Git进行分支开发等.我对Git的所有细节的了解目前是有限的,因为我是最近的转换.

问题:
我希望能够在Git存储库中工作.我想这样做,并获得所有这些将允许分支等的好东西.在我的一天结束时,或在其他需要的时刻,我希望能够采取我正在做的任何工作并放置它进入主存储库,然后我将其放入VSS.

理想情况下,在工作日的开始我会得到VSS最新版本..将此提交给Git ..然后在备用分支上工作,当需要提交VSS时将更改重新置于主数据库中.

因为我是一个相对git新手,可能是实现这一目标的最佳方式..以及发布/设置此方法的最佳命令.

*注意:Source Safe需要检查文件,然后才能对其进行更改.也许有一些工具/脚本我可以用来帮助自动化这个以将更改推回VSS?

git visual-sourcesafe

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

jQuery如何实现$ jQuery函数的别名?

围绕$ sign作为jQuery函数的别名,我有点麻烦,特别是在插件中.你能解释一下jQuery如何实现这种别名:它如何定义'$'作为jQuery函数的别名?这是第一个问题.

其次,你能解释下面的代码如何/为什么在插件的定义中将'$'映射到jQuery函数,为什么如果你不这样做,你的插件可能会与其他可能使用美元符号的库发生冲突?

(function( $ ){
    $.fn.myPlugin = function() {
        // Do your awesome plugin stuff here
    };
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

jquery

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

Visual Studio 2010 - RemovePreviousVersions

我有一个Visual Studio 2010部署项目,其中包含以下设置:

DetectNewerInstalledVersion = True
InstallAllUsers = True
RemovePreviousVersions = True
Run Code Online (Sandbox Code Playgroud)

我正在构建的项目有几个DLL,由于实现序列化的传统方式,此项目的文件版本无法递增(我们正在更改).

如何让安装项目完全删除现有文件(或者至少覆盖所有新文件)?

也许我需要在安装程序中编写卸载脚本(有人可以链接我这样做,我找不到)

我环顾四周,对于任何现有的问题,他们都说"增加你的文件版本",但对我来说这不是一个选项.

installer setup-project visual-studio-2010

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

如何设置具有多个值的ExportMetaData以及单个w/custom属性?

我在我的类上设置了以下ExportMetaData属性:

  [Export(typeof(IDocumentViewer))]
  [ExportMetadata("Name", "MyViewer")]
  [ExportMetadata("SupportsEditing", true)]
  [ExportMetadata("Formats", DocFormat.DOC, IsMultiple = true)]
  [ExportMetadata("Formats", DocFormat.DOCX, IsMultiple = true)]
  [ExportMetadata("Formats", DocFormat.RTF, IsMultiple = true)]  
Run Code Online (Sandbox Code Playgroud)

我也有一个支持界面:

  public interface IDocumentViewerMetaData {
    /// <summary>
    /// Gets the format.
    /// </summary>
    /// <value>The format.</value>
    IEnumerable<DocFormat> Formats { get; }
    /// <summary>
    /// Gets the name of the viewer
    /// </summary>
    /// <value>The name.</value>
    string Name { get; }
    /// <summary>
    /// Gets a value indicating whether this viewer supports editing
    /// </summary>
    /// <value><c>true</c> if [supports editing]; …
Run Code Online (Sandbox Code Playgroud)

c# mef interface

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

为什么返回异步类型必须为void,Task或Task <T>

我正在尝试用异步CTP弄脏手,我注意到编译器抱怨异步返回类型.其他类型有什么问题?

一个简单的演示

static void Main(string[] args)
{
    DoWork();
    Console.WriteLine("Returned to main");
    Console.Read();
}

// why do I need to return void, Task or Task<T> here?
// I know I can use something like Task<IEnumerable<string>>
private static async string[] DoWork()
{
    Console.WriteLine("DoWork started");
    return await Task.Factory.StartNew(
        delegate
        {
            Thread.Sleep(2000);                
            Console.WriteLine("DoWork done");
            return new List<string>();
        });        
}
Run Code Online (Sandbox Code Playgroud)

.net async-await c#-5.0

13
推荐指数
2
解决办法
8233
查看次数

确定Web http身份验证方法

如何确定REST Web服务是使用Basic,Kerberos,NTLM还是其他许多身份验证方法之一?

http-authentication

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

VB.NET和C#之间的二进制移位差异

我刚刚在翻译一些数据时发现了一个有趣的问题:

VB.NET:CByte(4) << 8返回4

但是C#:(byte)4 << 8返回1024

也就是说,为什么VB.NET:(CByte(4) << 8).GetType()返回类型{Name = "Byte" FullName = "System.Byte"}

然而C#:((byte)4 << 8).GetType()返回类型{Name = "Int32" FullName = "System.Int32"}

有没有理由为什么这两个对待二进制移位是一样的?接下来,是否有任何方法可以使C#位移与VB.NET相同(使VB.NET像C#一样执行CInt(_____) << 8)?

.net c# vb.net bit-manipulation vb.net-to-c#

11
推荐指数
3
解决办法
1734
查看次数