Request["key"]vs Request.Params["key"]vsRequest.QueryString["key"]
你经验丰富的程序员使用哪种方法?为什么?
我试图在nodejs中创建一个非阻塞的重计算.拿这个例子(从其他东西中删除):
http.createServer(function(req, res) {
console.log(req.url);
sleep(10000);
res.end('Hello World');
}).listen(8080, function() { console.log("ready"); });
Run Code Online (Sandbox Code Playgroud)
可以想象,如果我同时打开2个浏览器窗口,第一个将等待10秒,另一个将等待20,如预期的那样.因此,在知道回调以某种方式异步的情况下,我取消了睡眠并将其放入:
doHeavyStuff(function() {
res.end('Hello World');
});
Run Code Online (Sandbox Code Playgroud)
功能简单定义:
function doHeavyStuff(callback) {
sleep(10000);
callback();
}
Run Code Online (Sandbox Code Playgroud)
那当然不起作用......我也尝试定义一个EventEmitter并注册它,但是Emitter的主要功能在发出'done'之前就已经进入了睡眠状态,所以一切都会运行阻塞.
我想知道其他人如何编写非阻塞代码...例如mongojs模块,或者child_process.exec是非阻塞的,这意味着在代码的某处,他们将进程分配到另一个线程并听取它的事件.我怎样才能在一个例如漫长过程的方法中复制它?
我是否完全误解了nodejs范式?:/
谢谢!
感谢Linus的答案,确实唯一的方法是生成子进程,例如另一个节点脚本:
http.createServer(function(req, res) {
console.log(req.url);
var child = exec('node calculate.js', function (err, strout, strerr) {
console.log("fatto");
res.end(strout);
});
}).listen(8080, function() { console.log("ready"); });
Run Code Online (Sandbox Code Playgroud)
calculate.js可以花时间去做它需要的东西并返回.通过这种方式,可以并行运行多个请求.
我怎么能注入以下依赖?
public class Authenticate : AuthorizeAttribute
{
[Dependency]
public IAuthenticate AuthenticateLibrary { get; set; }
[Dependency]
public ILibrary BaseLibrary { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我使用Unity 2注入所有控制器.是否有Unity 2的教程并将依赖项注入过滤器?
dependency-injection unity-container filter asp.net-mvc-3 asp.net-mvc-4
尝试让jquery UI和淘汰js共同操作时遇到了一些小问题.基本上我想创建一个手风琴,通过foreach(或模板)从淘汰赛中添加项目.
基本代码如下:
<div id="accordion">
<div data-bind="foreach: items">
<h3><a href="#" data-bind="text: text"></a></h3>
<div><a class="linkField" href="#" data-bind="text: link"></a></div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这里没有什么令人印象深刻的...问题是,如果我做了类似的事情:
$('#accordion').accordion();
Run Code Online (Sandbox Code Playgroud)
将创建手风琴但内部div将是标题选择器(默认情况下为第一个子节点),因此效果不是所需的效果.
用这个修复东西:
$('#accordion').accordion({ header: 'h3' });
Run Code Online (Sandbox Code Playgroud)
似乎工作得更好,但实际上创造了2个手风琴,而不是一个有2个部分......很奇怪.
我试图探索淘汰模板并使用"afterRender"来重新演奏div,但无济于事......它似乎只重新渲染第一个链接作为手风琴而不是第二个.可能这是因为我的初学者知道了jquery UI.
你知道如何让一切都协同工作吗?
我试图用ko映射解决一个小问题.场景是我的ViewModel基本上是一个对象集合.每个对象都是通过json调用创建的,这样:
var ViewModel = ko.observableArray();
$.getJSON(url, function(data) {
ViewModel.push(ko.mapping.fromJSON(data));
});
Run Code Online (Sandbox Code Playgroud)
这非常有效,我可以在HTML中做各种魔术.问题是,例如,如果我想在我的收藏中添加一些东西,那么就说支持客户端"添加和编辑"场景.我想做的事情如下:
<input type="button" value="add new" data-bind="click: AddNew" />
Run Code Online (Sandbox Code Playgroud)
我希望ViewModel中的AddNew函数类似于:
function AddNew() {
this.push(// WHAT HERE?);
}
Run Code Online (Sandbox Code Playgroud)
基本上我需要推送一个与已经存在的对象相同的对象,当然还有所有消隐的属性......
我想到了一种从列表中"克隆"对象并将所有可观察对象设置为空的方法,但我不知道从哪里开始我害怕:/
我按照本指南在我的机器上设置了一个小测试Nuget私有存储库.
一切都很完美,我可以发布包,更新版本,下载等.唯一的问题是DownloadCount我的包总是0,无论我下载多少次.
我下载了NuGet源代码,但找不到更新此值的位置.此外,nuget似乎没有使用任何数据库技术,因此可能只是根据Packages文件夹的内容生成源.
有没有人知道这是一个已知的问题,还是我的设置中的问题,或者我是否应该在服务器上添加一些代码来自己记录下载?
谢谢!
我想以某种方式指定我的时间,Datetime.Now例如我知道
DateTime.Now.AddDays(-1);
Run Code Online (Sandbox Code Playgroud)
将在24小时之前得到昨天的日期,但我想在特定时间获取昨天的日期,例如下午5点.
我在StackOverflow上找不到任何有用的东西,有什么建议吗?
我正在尝试使用EF代码优先和迁移来弄清楚如何实现以下部署方案.我的想法是,我想用向后兼容的架构更改升级数据库(例如:添加一列)并测试一切仍然有效.它的灵感来自绿色/蓝色部署,但并不完全遵循这种模式.这背后的原因是遵循这个过程:
我肯定会面临的问题是,在第2步(和第4步),我肯定会从EF获得关于模型被更改的错误,尽管所有数据库更改都与现有代码兼容...
我知道解决方案是将数据库"向下"迁移到以前的版本(甚至进行数据库备份),但可能会发生某些迁移非常复杂且"向下"部分可能被破坏或者编码很差.
所以我的问题是:有没有办法避免EF检查模型或最终意识到更改是向后兼容的?
我正在使用骨干库来执行以下操作:
var Persons = Backbone.Collection.extend({
defaults: {
name: 'unknown',
age: 18
},
over_18: function () {
return this.filter(function (model) {
return model.get('age') > 18
});
},
under_18: function () {
var persons_over_18 = this.over_18;
return this.without(this, persons_over_18); // it does not work!! why?
}
});
persons = new Persons([{age: 17}, {age: 27}, {age:31} ]);
persons.under_18().length; // 3 instead of 1
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,该方法under_18无法正常工作,因为它返回所有模型,而不是只给出年龄属性小于18的模型.
所以为了调试我的代码,我决定看看Backbone.js Annotated Source,特别是下面的代码:
var methods = ['forEach', 'each', 'map', 'collect', 'reduce', 'foldl', ... ]; // …Run Code Online (Sandbox Code Playgroud) 我遇到与查找表和外键相关的 EF 代码优先迁移问题。假设我的代码中有这两个类:
public class Test
{
[Key]
public long Id { get; set; }
[Required]
public string Title { get; set; }
[Required, DisplayName("Test type")]
public TestType TestType { get; set; }
}
public class TestType
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
TestType是一个典型的查找表,我通常在方法中填充它们Seed():
context.TestTypes.AddOrUpdate(
it => it.Name,
new TestType() { Name = "Drug" },
new TestType() { Name = "Educational" },
new TestType() { Name = …Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc entity-framework ef-code-first entity-framework-migrations
我正在收获一个带有热量的文件,我真的想给它一个不错的id,而不是通常的"filXXXXXXXX",主要是因为我需要在安装程序的其他部分引用它.我知道Id总是相同的,在不同的机器上和不同的文件内容显然所以我可以放心使用它,并且相信它在构建时不会改变,比方说,在CI服务器上.
当然,让这个价值更加人性化会好得多.似乎Heat没有生成文件ID的命令行选项(编辑:显然有一个-suid选项将停止生成数字ID,只使用文件名作为ID,无论如何在许多场景中都不可行) ,所以我正在经历编写XSLT的痛苦,但无法达到我想要的,任何人都可以帮忙吗?
这是片段文件:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="DBScripts" />
</Fragment>
<Fragment>
<ComponentGroup Id="CSInstallerConfig">
<Component Id="cmpD6BAFC85C2660BE8744033953284AB03" Directory="DBScripts" Guid="{A39BABF5-2BAC-46EE-AE01-3B47D6C1C321}">
<File Id="filB31AC19B3A3E65393FF9059147CDAF60" KeyPath="yes" Source="$(var.CONFIG_PATH)\CSInstaller.config" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
Run Code Online (Sandbox Code Playgroud)
这是XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|*">
<xsl:copy>
<xsl:apply-templates select="@*|*" />
</xsl:copy>
</xsl:template>
<xsl:template match="File">
<xsl:attribute name="Id">
<xsl:value-of select="123"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
现在,我是一个使用XSL的真正的菜鸟,所以上面的文件可能完全是胡说八道,但无论如何,正在发生的是"文件"元素被直接复制而不会更改ID.
任何的想法?
我在开发安装时面临一个奇怪的问题,应该在其中一个步骤中安装证书.
问题与在Windows Server 2008 R2上为帐户(例如IIS_IUSRS)授予证书的私钥访问权限有关.私钥存储在位置C:\ Users\All Users\Microsoft\Crypto\RSA\MachineKeys中.
自定义C#安装项目导入证书,并在安装过程中为证书的私钥提供访问权限.一段时间(2-3秒)后,私钥文件将自动从MachineKeys文件夹中删除.因此,安装的Web应用程序无法访问特定证书并显示以下错误消息:
"System.Security.Cryptography.CryptographicException:Keyset不存在".此错误仅在Windows Server 2008 R2上发生,而对于Windows Server 2003,一切正常.
我的问题是,为什么私钥被删除以及哪个进程会这样做?
谢谢
更新17/05/2012
我还没有找到所描述问题的解决方案,并且我在其他论坛上没有发布任何回复(forums.asp.net,social.msdn.microsoft.com).那么,任何人都可以建议任何其他资源或建议,以进一步解决此问题吗?
再次感谢
当内容不够时,我遇到一个小问题,试图覆盖浏览器窗口的整个高度.我在Orchard CMS中使用bootstrap,这有任何相关性.
问题可以在这里看到

页面结构非常基本:
<body style="background-color: #b0a2b0;">
<div id="layout-wrapper" style="margin: 0px auto -75px; padding: 0px 0px 75px;">
<div class="container">
.... stuff ...
</div>
<div class="container">
... other stuff
</div>
</div>
<div id="footer" style="height: 75px;">
<div class="container">
</div>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
html,body并且#layout-wrapper所有都有高度设置为100%.直到现在我的聪明想法是添加一个额外的容器并相应地调整它的大小.问题是我需要在窗口调整大小时注意,并且如果页面上有东西隐藏或显示(因为这会改变可用高度).
我已经尝试将这个填充div设置为height: 100%但它似乎从页脚开始拍摄,结束时间基本上比页面长,并向下滚动最终向上拖动页脚.
作为最终结果我喜欢的是一个粘贴到底部的页脚,即使有大小调整或显示/隐藏的页面,页面也是全长的.
有任何想法吗?
c# ×4
asp.net ×2
asp.net-mvc ×2
knockout.js ×2
asynchronous ×1
backbone.js ×1
certificate ×1
css ×1
datetime ×1
entity-framework-migrations ×1
filter ×1
html ×1
javascript ×1
jquery-ui ×1
node.js ×1
nonblocking ×1
nuget ×1
nuget-server ×1
powershell ×1
private-key ×1
wix ×1
xml ×1
xslt ×1