我一直在搜索SO和Google,了解可用于ASP.NET MVC的各种视图引擎,但是没有找到比视图引擎的简单高级描述更多的内容.
我不一定在寻找"最佳"或"最快",而是在各种情况下对主要参与者(例如默认的WebFormViewEngine,MvcContrib View Engines等)的优缺点进行实际比较.我认为这对确定从默认引擎切换是否对给定项目或开发组有利有用.
有没有人遇到这样的比较?
如果目标框架是较新版本,那么我的项目代码可能会有一些小的地方可以大大改进.我希望能够更好地利用C#中的条件编译来根据需要切换它们.
就像是:
#if NET40
using FooXX = Foo40;
#elif NET35
using FooXX = Foo35;
#else NET20
using FooXX = Foo20;
#endif
Run Code Online (Sandbox Code Playgroud)
这些符号中的任何一个都是免费的吗?我是否需要将这些符号作为项目配置的一部分注入?看起来很容易,因为我知道哪个框架是MSBuild的目标.
/p:DefineConstants="NET40"
Run Code Online (Sandbox Code Playgroud)
更新:我的问题是人们如何处理这种情况?你在创造不同的配置吗?您是否通过命令行传递常量?
我意识到OAuth规范没有指定任何关于ConsumerKey,ConsumerSecret,AccessToken,RequestToken,TokenSecret或Verifier代码的来源,但我很好奇是否有任何创建显着安全令牌的最佳实践(特别是令牌/秘密组合).
在我看来,创建令牌有几种方法:
(1)的优点是数据库是看起来最安全的信息的唯一来源.对(2)或(3)进行攻击会更难.
散列实数据(2)将允许从可能已知的数据重新生成令牌.可能没有真正为(1)提供任何优势,因为无论如何都需要存储/查找.比(1)更多的CPU密集型.
加密真实数据(3)将允许解密以了解信息.与(1)和(2)相比,这将需要更少的存储空间和更少的查找,但也可能不太安全.
是否还有其他方法/优点/缺点需要考虑?
编辑:另一个考虑因素是令牌中必须有某种随机值,因为必须存在过期和重新发行新令牌的能力,因此它不能只包含真实数据.
关注问题:
是否有最小的令牌长度,以显着加密安全?据我了解,更长的令牌秘密会创建更安全的签名.这种理解是否正确?
从散列角度来看,使用特定编码优于另一种编码是否有优势?例如,我看到很多使用十六进制编码的API(例如GUID字符串).在OAuth签名算法中,令牌用作字符串.使用十六进制字符串,可用字符集将比使用Base64编码的字符集小得多(更可预测).在我看来,对于两个长度相等的字符串,具有较大字符集的字符串将具有更好/更宽的散列分布.在我看来,它会提高安全性.这个假设是否正确?
OAuth规范在11.10熵的熵中提出了这个问题.
我一直有麻烦关节之间的差异ILookup<TKey, TVal>
和IGrouping<TKey, TVal>
,并很好奇,如果我理解正确了.LINQ通过生成IGrouping
项目序列来复杂化问题,同时也为我提供了ToLookup
扩展方法.所以在我仔细观察之前感觉它们是一样的.
var q1 =
from n in N
group n by n.MyKey into g
select g;
// q1 is IEnumerable<IGrouping<TKey, TVal>>
Run Code Online (Sandbox Code Playgroud)
这相当于:
var q2 = N.GroupBy(n => n.MyKey, n => n);
// q2 is IEnumerable<IGrouping<TKey, TVal>>
Run Code Online (Sandbox Code Playgroud)
这看起来很像:
var q3 = N.ToLookup(n => n.MyKey, n => n);
// q3 is ILookup<TKey, TVal>
Run Code Online (Sandbox Code Playgroud)
我在以下类比中是否正确?
IGrouping<TKey, TVal>
是一个单独的组(即键控序列),类似于KeyValuePair<TKey, TVal>
值实际上是一系列元素(而不是单个元素)IEnumerable<IGrouping<TKey, TVal>>
是那些序列(类似于迭代时得到的结果)IDictionary<TKey, TVal>
ILookup<TKey, TVal>
更像是一个IDictionary<TKey, …
当浏览器的Accept请求标头显示如下内容时:
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Run Code Online (Sandbox Code Playgroud)
这是否意味着application/xml
,application/xhtml+xml
和text/html
所有有质量PARAM 0.9
?
或者它是否意味着application/xml
并application/xhtml+xml
具有默认(q=1
)并text/html
具有q=0.9
参数?
我假设前者,但希望有人知道更明确.
有没有人知道针对.NET CLR/DLR的ECMAScript 的真实(i ..无蒸发器)实现?理想情况下,Rhino适用于Java.在.NET Framework/Mono Framework上运行的可靠Rhino端口将是完美的.
我只看过一些提到过的项目,但从来没有看到过任何我能够运行脚本的东西.这是我已经知道的:
MSScriptControl ActiveX控件:AFAIK,这是Microsoft最后一个真正符合ECMAScript标准的实现(运行JScript 5.7).我已经与MSScriptControl集成,但不认为COM互操作是这个问题的答案.x64是此选项的杀手锏.
JScript.NET:我不算JScript.NET,因为它永远无法成功解析我的任何真实脚本.闭包似乎有问题.
管理JScript:听起来像我想要的但它似乎死在水中.这是DLR的一个主要示例实现,但后来与SilverLight纠缠在一起,并且自2007年以来似乎已经逐渐消失.有关此状态的可信来源将是有帮助的.
MyJScript:作为DLR的教程实现而构建.有人知道这是一个完整的实现吗?
Jint:.NET的JavaScript解释器.不支持Currying或try
- catch
- finally
.
RemObjects Script for .NET:一个有趣的竞争者仍在开发中.我对他们的营销实际上是什么感到困惑,但听起来它最终可能是合适的.如果有人知道更多有关它也会有所帮助.
V8 for .NET:如果有人将V8移植到.NET,这将是很好的.据我所知,这方面也没有太大的努力.链接是一个从托管C++包装器调用它的想法.
对于后台,我希望能够在.NET中执行JavaScript; 即将一组脚本加载到上下文中并调用该上下文并检索执行结果.目前,我通过繁琐的COM Interop跳过箍使用MSScriptControl.COM的不一致使得部署和确保一致的执行非常困难.
我希望能够从.NET中执行相当复杂的JavaScript测试工具.这不是用于创建用户宏或简单的小脚本; 我需要像Rhino这样的真实JavaScript环境.如果实现是在CLR(而不是COM)之上运行的,那么这对当前的一些问题确实有帮助.
是否有任何输入SHA-1将计算为十四进制的十六进制值,即"0000000000000000000000000000000000000000"?
我试图理解对非限定属性命名空间的"XML 1.0(第三版)中的命名空间"定义的正确解释.
"未加前缀的属性名称的命名空间名称始终没有值."
后来在同一部分:
"默认名称空间声明中的属性值可能为空.在声明范围内,没有默认名称空间,这具有相同的效果."
因此,如果我想为元素(及其子元素)声明默认命名空间,是否还必须为驻留在该命名空间内的任何属性声明前缀命名空间映射?
例如,在此示例中
<parent xmlns="http://example.com/foo">
<child attrib="value">text</child>
<parent>
Run Code Online (Sandbox Code Playgroud)
我会解释上面的定义,说明名称attrib
空是空的.
所以,如果我需要attrib
具有相同的命名空间parent
,那么我将被迫这样做?
<foo:parent xmlns:foo="http://example.com/foo">
<foo:child foo:attrib="value">text</foo:child>
<foo:parent>
Run Code Online (Sandbox Code Playgroud)
或这个?
<parent xmlns="http://example.com/foo" xmlns:foo="http://example.com/foo">
<child foo:attrib="value">text</child>
<parent>
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很愚蠢,因为它似乎打败了默认命名空间的目的.我希望我只是误解了规范.
我很好奇人们在Ajax Web应用程序中在运行时替换整个文档的经历.这种情况很少见,但我发现应用程序需要整个页面重建的一些情况,并且所有内容都存在于本地而无需另外的服务器往返.
我可以很容易地准备新的文档或者一个新的DOM树或字符串.所以我正在评估各种方法的权衡.
如果我想使用String方法,这似乎工作:
document.open();
document.write(newStringDoc);
document.close();
Run Code Online (Sandbox Code Playgroud)
大多数浏览器都做得很好,但很多浏览器在重新渲染时会有轻微的闪烁.我注意到,第二次通过Firefox 4.0b7只会坐在那里旋转,好像它正在加载.点击位置栏上的停止按钮似乎完成了页面渲染.(编辑:这似乎在4.0b8中修复)此外,此方法似乎阻止用户点击刷新以重新加载当前URL(它重新加载动态生成的页面).
如果我使用新的DOM树方法(在灵活性和速度方面有不同的优点/缺点),那么这似乎有效:
document.replaceChild(newDomDoc, document.documentElement);
Run Code Online (Sandbox Code Playgroud)
大多数浏览器似乎完全没有闪烁处理这个.不幸的是,IE9 beta会抛出"DOM Exception:HIERARCHY_REQUEST_ERR(3)" replaceChild
并且永远不会完成.我还没有尝试过最新的预览版本,看看这是否只是一个修复过的新bug.(编辑:这似乎是在RC1中修复的.)
我的问题:有没有人采用与其中任何一种不同的方法?有没有人有任何其他警告,或许某个浏览器从根本上打破了这些方法之一?
更新:也许这将增加背景并有助于想象力.考虑应用程序脱机的情况.没有可用于重定向或刷新的服务器.应用程序的必要状态已经加载(或存储)在客户端.UI由客户端模板构成.
我相信Gmail会使用嵌入在根文档中的iframe.看来,至少其中一些iframe的起始文档只是一个裸HTML5文档,然后父文档才会操作.
使用iframe将是替换当前文档的替代整个子iframe或仅替换其文档的另一种变体.虽然将新文档附加到iframe的方法存在同样的情况.
我很好奇是否有人知道Grails或Play等框架如何检测代码中的更改并自动触发重新编译而不重新启动应用服务器?Groovy的编译器或其动态性质是否有特定的东西可以轻松实现?
对于后台,我在构建过程中有一个自定义代码生成阶段,我希望能够具有类似的编辑和刷新功能.
提前感谢任何指针,即使我必须筛选代码以获得更大的图片.
编辑:我应该澄清一点,我不打算构建一个Grails插件,以便了解在servlet容器中的任何应用程序中执行此操作所需的内容.即,我使用的是Groovy而不是Grails.
Edit2:听起来Play有一个特定的DEV模式,可以进行热重新加载:http://www.playframework.org/documentation/1.1.1/main#lifecycle
我知道JRebel通过类加载器执行精细的类版本控制,但我假设像Grails或Play这样的Web框架没有将它带到那个级别.
c# ×2
javascript ×2
.net ×1
.net-3.5 ×1
.net-4.0 ×1
ajax ×1
asp.net-mvc ×1
clr ×1
dom ×1
ecma262 ×1
encryption ×1
grails ×1
groovy ×1
group-by ×1
hash ×1
hotdeploy ×1
html ×1
http ×1
http-headers ×1
igrouping ×1
ilookup ×1
java ×1
linq ×1
mime-types ×1
msbuild ×1
namespaces ×1
oauth ×1
razor ×1
security ×1
sha1 ×1
viewengine ×1
w3c ×1
xml ×1