我今天早些时候问过这个问题.
因此,由于moq从一个接口创建它自己的类,我无法将它转换为另一个类.
所以它让我想知道如果我创建了一个ICustomPrincipal并尝试强制转换它.
这是我的嘲笑的样子:
var MockHttpContext = new Mock<HttpContextBase>();
var MockPrincipal = new Mock<ICustomPrincipal>();
MockHttpContext.SetupGet(h => h.User).Returns(MockPrincipal.Object);
Run Code Online (Sandbox Code Playgroud)
在我试图测试以下代码的方法给出错误(再次):
var user = (ICustomPrincipal)httpContext.User;
Run Code Online (Sandbox Code Playgroud)
错误如下:
Unable to cast object of type 'IPrincipalProxy4081807111564298854aabfc890edcc8'
to type 'MyProject.Web.ICustomPrincipal'.
Run Code Online (Sandbox Code Playgroud)
我想我仍然需要接口和moq的一些练习,但是我不应该将moq创建的类转换回ICustomPrincipal?我知道httpContext.User会返回一个IPrincipal,所以可能会丢失一些东西吗?
好吧,如果有人可以帮助我,我会很感激.
Pickels
编辑:
根据要求,我正在测试的方法的完整代码.它仍然没有完成,但这是我到目前为止:
public bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}
var user = (ICustomPrincipal)httpContext.User;
if (!user.Identity.IsAuthenticated)
{
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
EDIT2:
似乎如果我使用Thread.CurrentPrincipal而不是HttpContext.current.user,我可以毫无问题地投射它.现在阅读两者之间的差异.
在何处,何时以及如何为私人网站创建管理员帐户/用户?
所以我要问的是创建第一个管理员帐户/用户的首选技术是什么.就我而言,这是一个私人网络应用程序.我说的是将拥有该应用程序的帐户/用户,如果需要,将创建/推广其他管理员.我想你可以这个人是root用户吗?
以下是我在其他网站/网络应用程序中遇到的一些方法.
安装向导:
您在博客软件或论坛中看到了很多.安装应用程序时,它会要求您创建管理员用户.私人网络应用很可能没有这个.
安装文件:
您运行以安装应用程序的文件.此文件将为您创建管理员帐户.
配置文件:
包含管理员帐户凭据的配置文件.
手动将其插入数据库:
手动将管理员信息插入数据库.
我的网络应用程序有3个主要的node.js组件:网站,订阅源和作业.
要开始这些我永远使用:
//forever.js
var forever = require('forever');
function start(name){
forever.start( ['coffee', name + '.coffee'], { /* log options */ } )
};
start('website');
start('feeds');
start('jobs');
Run Code Online (Sandbox Code Playgroud)
我首先注意到的是,如果我运行脚本,它不会作为守护进程运行它.(这很可能正常)
node forever.js
Run Code Online (Sandbox Code Playgroud)
所以我接下来要做的就是永远运行forever.js脚本.我不确定这是否正确,还有一个forever.startDaemon所以不确定我应该使用哪一个.
forever start forever.js
Run Code Online (Sandbox Code Playgroud)
这有效,但问题是我想在发布我的应用程序的新版本时重新启动所有进程.我正在使用git的post-receive hook来第一次运行forever.js,但如果我在每次post-receive上执行此操作,它每次只会生成3个进程.
所以我想如果它们已经运行,我需要一种重启3个进程的方法.我想用forever.list做这个,但文档只说:
forever.list (format, callback)
Returns a list of metadata objects about each process that is being run using
forever. This method is synchronous and will return the list of metadata as such.
Only processes which have invoked forever.startServer() will be available from
forever.list()
Run Code Online (Sandbox Code Playgroud)
首先,我不确定格式是什么意思,第二,它期望回调,但后来它说它是同步的.这有点令人困惑,我不知道如何使用列表.
最后,我想要做的是在git的post-receive钩子上启动/重启3个node.js进程.
我刚刚在visual studio express C#中创建了一个wpf应用程序,需要创建一个安装程序文件.这只是几台机器,因为它对我来说是个人程序.我使用简单的方法查看了Advanced Installer,但无法弄清楚如何做到这一点,或者它是否甚至可以创建一个wpf安装程序.我也尝试过WIX,结果相同.
这样做的任何提示?
从webtest文档中我了解到:
模拟身份验证的最佳方法是,如果您的应用程序在environ ['REMOTE_USER']中查看是否有人通过身份验证.然后你可以简单地设置该值,如:
app.get('/secret', extra_environ=dict(REMOTE_USER='bob'))
Run Code Online (Sandbox Code Playgroud)
我试图在Google App引擎环境中做同样的事情.我想模拟登录用户和管理员用户.
如果可能,我必须在extra_environ中设置哪些字典值来完成此操作?
在我的 React.js 应用程序中,我使用 jquery.ajax方法从后端 API 检索信息。为此,我需要添加一个授权令牌作为标头,并添加了以下headers选项:
$.ajax({
url: this.props.source,
headers: { 'Accept':'application/json', 'Authorization':'Token 36d417' },
dataType: 'jsonp',
success: function(data) {
this.setState({data: data});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
Run Code Online (Sandbox Code Playgroud)
但是我收到了401 Unauthorized服务器的响应。当我检查标题时,它们似乎没有被添加?
Remote Address:189.28.154.73:8080
Request URL:https://todos-api.com/api/v1/todos?callback=jQuery1100005772984796203673_1424179650018&_=1424179650019
Request Method:GET
Status Code:401 Unauthorized
Request Headersview source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6,nl;q=0.4
Cache-Control:no-cache
Connection:keep-alive
Host:todos-api.com
Pragma:no-cache
Referer:https://todos-reactjs.io/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
Run Code Online (Sandbox Code Playgroud) 在FF 37中,默认选择输入如下所示:

当我尝试给它一个不同的边框颜色,如下所示:
select { border: 1px solid silver; }
Run Code Online (Sandbox Code Playgroud)
结果如下:

出于某种原因,当您为选择输入提供不同的边框时,它还会向箭头按钮添加背景和边框.
当我执行以下操作时会发生类似的事情:
select { background: transparent; }
Run Code Online (Sandbox Code Playgroud)
最终结果如下:

为什么会发生这种情况?如何更改选择输入的边框或背景而不更改向下箭头按钮?
当我在网络位置"获取Bash Here"时,控制台不在该目录中.而是目录是/ c/Windows.
这是Git Bash的限制吗?
我有这个问题,它让我疯了!
所以我正在开发我的第一个真正的Google App Engine应用程序,我总是喜欢在编写测试时发现它们.
所以我有以下设置:
我有一个有鼻子,鼻子,网络测试和gaetestbed的virtualenv.它被称为porksvr.
我像这样激活我的virtualenv:
source porksvr/bin/activate
Run Code Online (Sandbox Code Playgroud)
要运行鼻子,我使用以下命令:
nosetests --with-gae --gae-lib-root /home/fs/gae
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误
DEBUG: Access to module file denied:
/home/fs/work/gaecode/porksvr/lib/python2.6/site-packages/webtest
Run Code Online (Sandbox Code Playgroud)
所以起初我认为"好吧,鼻子在dev_appserver的'上下文'中运行应用程序,所以它不知道webtest".
但是要确保我创建了一个新目录并添加了一个小型GAE应用程序.它只有3个文件:
-main.py
-app.yaml
-test_huh.py(导入webtest模块.)
现在让我感到困惑的是,这才有效.我运行了nosetests cmds,它实际上通过了我的测试.
所以我开始挖掘我的应用程序,找出可能有什么不同但我真的碰壁了.
我首先想到它可能是一个权限问题,因为错误说'访问...被拒绝'但我真的找不到任何特别的东西.接下来我想也许是因为我在virtualenv之前创建了我的应用程序,但我真的看不出这是怎么回事.
所以,如果有人知道为什么会发生这种情况,我真的很感激.