我目前正在研究一个ASP.NET MVC项目,并发现了一个看起来很奇怪的错误.
在ASP.NET MVC模板表单中总是得到一个AntiForgeryToken(因此让我相信这是一个最佳实践).然而,AntiForgeryTokens似乎不适用于缓存.
例如,当我打开一个包含AntiForgeryToken的表单的网站并且我复制浏览器窗口时,两个窗口都具有完全相同的AntiForgeryToken,从而在发布表单时导致异常.禁用缓存时不存在此问题(通过ActionFilter NoCache,请参阅禁用整个ASP.NET网站的浏览器缓存).
所以我想我的问题是:这应该是那样的吗?除了禁用缓存以解决问题之外还有其他方法吗?
特别是默认的ASP.NET MVC模板包含AntiForgeryTokens但不禁用缓存(因此对上述错误开放)的事实让我很奇怪.
提前致谢!
我正在为我正在计划的项目进行一些评估工作.
我最近查看了针对我的应用程序的数据存储机制的解决方案,同时研究偶然发现了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
我正在设置我的新项目,并且想知道如何实现我的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上发布我的想法作为一个问题,以获得一些反馈,也许一些建议如何更好/更容易/更安全.
因此,在我没有真正关注新开发的一段时间之后,我再次调查MVVM,并且我注意到教程/指南等的数量已经大大增加.然而,MVVM的大多数示例/示例实现都缺乏解释我不太清楚的东西.所有这些示例都非常简单,它们都没有从数据库/文件/等中读取内容.
现在举个例子我有一些类似绘画的应用程序,我将这些绘画保存在XAML中.什么属于ViewModel什么属于模型?
Model提供的功能是从/向XAML文件加载/保存绘画吗?
ViewModel是否绑定到模型公开的属性(颜色,宽度,位置等)?
验证是在模型中还是在ViewModel中进行的?
当我偶然发现一种名为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#中实现?它甚至可能吗?
我目前正在研究我的一个项目,这是一个类似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)
代码中没有的一些东西:
问题是如何对OnMouseLeftButtonDown方法进行单元测试?问题是它严重依赖于MouseEventArgs,我真的不知道模拟/存根MouseEventArgs的好方法.
我目前正在开发类似Paint的WPF应用程序,现在站在问题之前我如何让我的用户保存创建的图像.通常我会将它们保存到磁盘,但在此应用程序中,我要求以后允许用户从已创建的"图像"中创建更大的"图像".对于普通的文件系统方法,这仍然没有问题,但是用户还应该能够通过类别/标签等特定属性搜索图像,并且使用普通的文件系统方法会很困难.
所以我想到了我实现我想要的一些选择,现在想知道你对这些方法的看法,或者你是否知道更好的方法.方法是:
谢谢!
是否可以在OpenLayers的一个图层中放置多个图像?
理想情况下,我想将我的图片分为几类(每一层是一个类别),这样我可以整体显示和隐藏每个类别,而不是显示/隐藏每张图片。
这可能吗?我发现了几个使用OpenLayers的Image层(似乎仅支持一个图像)或使用带有StyleMap的Vector层(似乎也仅允许一个外部图像)的示例。
我是否忽略了某些内容,还是会花费更多的精力(例如,创建自定义图层类型)?
提前致谢!
我想知道是否有人知道OpenLayers是否存在任何现有的TypeScript定义文件(或者它们是否已经在制作中).
我尝试自己解析OpenLayers源文件并使用文档注释来构建TypeScript定义文件但是为了真正完成这项工作,我需要一个完整的JavaScript解析器,它也能理解OpenLayers中的文档语法(它使用NaturalDocs,http:// naturaldocs .org)我开始认为手工翻译信息比编写这样的解析器更容易:(.
现在任何人都有类似的项目,或者想知道如何完成生成这些TypeScript定义文件的任务?
提前致谢!
我目前正在尝试使用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) c# ×3
mvvm ×2
openlayers ×2
wpf ×2
.net ×1
caching ×1
database ×1
dll ×1
embed ×1
extent ×1
f# ×1
file ×1
haskell ×1
image ×1
layer ×1
mouseevent ×1
openlayers-3 ×1
powershell ×1
prism ×1
sieve ×1
sqlite ×1
t4 ×1
typescript ×1