小编chr*_*chu的帖子

ASP.NET MVC AntiForgeryToken和Caching

我目前正在研究一个ASP.NET MVC项目,并发现了一个看起来很奇怪的错误.

在ASP.NET MVC模板表单中总是得到一个AntiForgeryToken(因此让我相信这是一个最佳实践).然而,AntiForgeryTokens似乎不适用于缓存.

例如,当我打开一个包含AntiForgeryToken的表单的网站并且我复制浏览器窗口时,两个窗口都具有完全相同的AntiForgeryToken,从而在发布表单时导致异常.禁用缓存时不存在此问题(通过ActionFilter NoCache,请参阅禁用整个ASP.NET网站的浏览器缓存).

所以我想我的问题是:这应该是那样的吗?除了禁用缓存以解决问题之外还有其他方法吗?

特别是默认的ASP.NET MVC模板包含AntiForgeryTokens但不禁用缓存(因此对上述错误开放)的事实让我很奇怪.

提前致谢!

caching antiforgerytoken asp.net-mvc-4

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

如何在.NET DLL中嵌入SQLite数据库,然后在C#中使用它?

我正在为我正在计划的项目进行一些评估工作.

我最近查看了针对我的应用程序的数据存储机制的解决方案,同时研究偶然发现了SQLite.我目前使用SQLite和System.Data.SQLite包装器.

我真的很喜欢它的工作方式,但我有一个问题,我无法修复,我也没有找到有关我在互联网上的问题的帮助.

我希望我的SQLite数据库嵌入到我的应用程序DLL(即Title.Storage.dll)中,以便在此DLL中使用.这可能吗?

那我怎么才能访问数据库呢?

如果我可以使用类似的东西会很棒:

SQLiteConnection con = new SQLiteConnection();
con.ConnectionString="DataSource=Title.Storage.storage.db3";
con.Open();
Run Code Online (Sandbox Code Playgroud)

在此先感谢和最诚挚的问候,

3Fox

.net c# embed sqlite dll

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

通过T4代码生成自动INotifyPropertyChanged实现?

我正在设置我的新项目,并且想知道如何实现我的ViewModel类确实具有INotifyPropertyChanged支持,而不必亲自手动编码所有属性.

我查看了AOP框架,但我认为他们只会用另一个依赖项炸毁我的项目.

所以我考虑用T4生成属性实现.

设置是这样的:我有一个ViewModel类,它只声明它的Properties背景变量,然后我用T4从它生成Property Implementations.

例如,这将是我的ViewModel:

public partial class ViewModel
{
    private string p_SomeProperty;
}
Run Code Online (Sandbox Code Playgroud)

然后T4将遍历源文件并查找名为"p_"的成员声明并生成如下文件:

public partial class ViewModel
{
    public string SomeProperty
    {
        get
        {
            return p_SomeProperty;
        }
        set
        {
            p_SomeProperty= value;
            NotifyPropertyChanged("SomeProperty");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法有一些优点,但我不确定它是否真的有效.所以我想在StackOverflow上发布我的想法作为一个问题,以获得一些反馈,也许一些建议如何更好/更容易/更安全.

c# t4 inotifypropertychanged

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

MVVM澄清:什么属于ViewModel,什么属于Model?

因此,在我没有真正关注新开发的一段时间之后,我再次调查MVVM,并且我注意到教程/指南等的数量已经大大增加.然而,MVVM的大多数示例/示例实现都缺乏解释我不太清楚的东西.所有这些示例都非常简单,它们都没有从数据库/文件/等中读取内容.

现在举个例子我有一些类似绘画的应用程序,我将这些绘画保存在XAML中.什么属于ViewModel什么属于模型?

Model提供的功能是从/向XAML文件加载/保存绘画吗?

ViewModel是否绑定到模型公开的属性(颜色,宽度,位置等)?

验证是在模型中还是在ViewModel中进行的?

mvvm

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

Haskell - > F#:特纳的筛子

当我偶然发现一种名为Euler's Sieve的Eratosthenes筛子的改进版本时,我正在阅读不同的筛选算法.根据维基百科,在Haskell中实现了一个稍微不同的想法版本(称为Turner's Sieve).

现在我试图了解代码片段的确切内容,我认为我已经得到了它,但现在我想将代码翻译成F#并且真的不知道从哪里开始.我主要担心的是,似乎没有"减去"两个序列的功能.

这是代码:

import Data.OrdList (minus)

primes = euler [2..]
euler (p : xs) = p : euler (xs `minus` map (*p) (p : xs))
Run Code Online (Sandbox Code Playgroud)

如何在F#中实现?它甚至可能吗?

f# haskell sieve

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

单元测试功能依赖于MouseEventArgs?

我目前正在研究我的一个项目,这是一个类似MSPaint的WPF应用程序.但是,我不使用铅笔工具或类似的东西,但使用对象(矩形,圆形,三角形等).我使用Prism和MVVM模型来实现可测试性和可维护性.

我现在遇到了一个问题.我有一个CanvasView.xaml(顾名思义)我正在绘制的画布.我已经实现了自定义Prism CommandBehaviors(即MouseDownCommandBehavior),以提供一种方法将ViewModel的命令绑定到画布上的鼠标操作.

基本设置如下所示:

public DelegateCommand<MouseEventArgs> MouseLeftButtonDownCommand { get; set; }

public CanvasViewModel(ICanvasView view, IEventAggregator eventAggregator) : base(view)
{
    m_View = view;
    m_EventAggregator = eventAggregator;
    m_EventAggregator.GetEvent<ToolboxSelectionChangedEvent>().Subscribe(OnToolboxSelectionChanged);


    MouseLeftButtonDownCommand = new DelegateCommand<MouseEventArgs>(OnMouseLeftButtonDown);
}

public void OnMouseLeftButtonDown(MouseEventArgs args)
{
    Point position = m_View.GetPosition(args);

    if(SelectedObject!=null){
        PaintObject po = SelectedObject.Clone();
        Canvas.SetLeft(po,position.X);
        Canvas.SetTop(po,position.Y);
        PaintObjects.Add(po);
    }
}
Run Code Online (Sandbox Code Playgroud)

代码中没有的一些东西:

  • PaintObjects是一个PaintObject对象的集合,View上的ItemsControl绑定到这些对象
  • PaintObject是所有可用PaintObject(Rectangle,Circle,Triangle等)的基类.
  • SelectedObject(类型为PaintObject)由另一个Prism模块(工具箱)中的选择过程决定

问题是如何对OnMouseLeftButtonDown方法进行单元测试?问题是它严重依赖于MouseEventArgs,我真的不知道模拟/存根MouseEventArgs的好方法.

wpf prism mvvm mouseevent

6
推荐指数
2
解决办法
1435
查看次数

C#:应用程序中的内部文件数据库

我目前正在开发类似Paint的WPF应用程序,现在站在问题之前我如何让我的用户保存创建的图像.通常我会将它们保存到磁盘,但在此应用程序中,我要求以后允许用户从已创建的"图像"中创建更大的"图像".对于普通的文件系统方法,这仍然没有问题,但是用户还应该能够通过类别/标签等特定属性搜索图像,并且使用普通的文件系统方法会很困难.

所以我想到了我实现我想要的一些选择,现在想知道你对这些方法的看法,或者你是否知道更好的方法.方法是:

  • 将图像保存在应用程序的内部数据库中(通过SQLite或类似的东西)
  • 将图像保存为文件系统中的普通文件,并将数据库保留在应用程序中以引用这些图像(如果用户删除了图像,会发生什么情况?)
  • 将图像保存为文件系统中的普通文件,而无需在应用程序中使用额外的数据库(很难按类别等过滤它们)

谢谢!

c# database wpf file

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

OpenLayers中每层多张图像

是否可以在OpenLayers的一个图层中放置多个图像?

理想情况下,我想将我的图片分为几类(每一层是一个类别),这样我可以整体显示和隐藏每个类别,而不是显示/隐藏每张图片。

这可能吗?我发现了几个使用OpenLayers的Image层(似乎仅支持一个图像)或使用带有StyleMap的Vector层(似乎也仅允许一个外部图像)的示例。

我是否忽略了某些内容,还是会花费更多的精力(例如,创建自定义图层类型)?

提前致谢!

image layer openlayers

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

OpenLayers和TypeScript?

我想知道是否有人知道OpenLayers是否存在任何现有的TypeScript定义文件(或者它们是否已经在制作中).

我尝试自己解析OpenLayers源文件并使用文档注释来构建TypeScript定义文件但是为了真正完成这项工作,我需要一个完整的JavaScript解析器,它也能理解OpenLayers中的文档语法(它使用NaturalDocs,http:// naturaldocs .org)我开始认为手工翻译信息比编写这样的解析器更容易:(.

现在任何人都有类似的项目,或者想知道如何完成生成这些TypeScript定义文件的任务?

提前致谢!

openlayers typescript openlayers-3

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

PowerShell AST修改和范围

我目前正在尝试使用PowerShell 3.0中引入的AST功能来修改ScriptBlock.我的要求是ScriptBlock的参数块中的所有参数都获得一个[Parameter(Mandatory)]属性.

基本上代码应该修改这个:

Param([string]$x)

Write-Host $x
Run Code Online (Sandbox Code Playgroud)

对此:

Param([Parameter(Mandatory)][string]$x)

Write-Host $x
Run Code Online (Sandbox Code Playgroud)

但是,我在添加新属性时遇到了一个问题,因为它需要一个IScriptExtent,我不知道应该如何创建一个新属性IScriptExtent.

如何创建新的脚本范围?我可以使用什么价值的头寸?我是否必须更改所有后续范围的位置?

我尝试重用我正在修改的每个参数的范围,但不幸的是,这似乎没有产生它应该的结果(例如,当我调用ToString修改后ScriptBlock我没有看到任何变化).

到目前为止,我的实现基于此处ICustomAstVisitor发现.

最重要的方法如下:

public object VisitParameter(ParameterAst parameterAst)
{
   var newName = VisitElement(parameterAst.Name);

   var extent = // What to do here?

   var mandatoryArg = new AttributeAst(extent, new ReflectionTypeName(typeof (ParameterAttribute)),
        new ExpressionAst[0],
        new[] {new NamedAttributeArgumentAst(extent, "Mandatory", new ConstantExpressionAst(extent, true), true)});

   var newAttributes = new[] {mandatoryArg}.Concat(VisitElements(parameterAst.Attributes));
   var newDefaultValue = VisitElement(parameterAst.DefaultValue);
      return new ParameterAst(parameterAst.Extent, newName, newAttributes, newDefaultValue);
}
Run Code Online (Sandbox Code Playgroud)

powershell abstract-syntax-tree extent

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