我们希望实施一个" 故障屏障 "策略来管理应用程序中的异常.我们的应用程序有一件事是"回传"响应的概念,基本上是一个无操作,我们希望返回优先投掷500,400等HTTP状态代码 - 例如我们面向外部的应用程序应该总是返回一个有效的响应,即使抛出了一个底层的异常 - 我们想要处理该应用程序的内部,并仍然返回一个有效的noop响应.
我们的第一个实现是一个Servlet过滤器,它将把所有请求包装在try/catch块中,并从catch返回默认返回,例如:
try{
chain.doFilter()
} catch (Throwable t) {
generatePassbackResponse(HttpServletRequest req, HttpServletResponse res)
}
Run Code Online (Sandbox Code Playgroud)
虽然这主要是有效的,并且感觉很好和干净(我们可以返回漂亮的文本,适当地设置内容/类型等),但一个问题似乎是当抛出Exception时,响应仍然通过Status-Code:500来实现.
HttpServletResponse.setStatus(200)没有效果,javadoc确实说它只适用于普通请求.
我们的第二个实现思路是我们可能必须转发到另一个页面,或者将一个errorPage插入到web.xml中并手动sendError到该页面 - 尽管我们对是否有人有特定的推荐感兴趣.
我刚刚调试了一个函数,它返回一个让我担心的字符串.我一直认为返回字符串的函数的隐式Result变量在函数调用开始时将为空,但以下(简化)代码产生了意外的结果:
function TMyObject.GenerateInfo: string;
procedure AppendInfo(const AppendStr: string);
begin
if(Result > '') then
Result := Result + #13;
Result := Result + AppendStr;
end;
begin
if(ACondition) then
AppendInfo('Some Text');
end;
Run Code Online (Sandbox Code Playgroud)
多次调用此函数导致:
"Some Text"
Run Code Online (Sandbox Code Playgroud)
第一次,
"Some Text"
"Some Text"
Run Code Online (Sandbox Code Playgroud)
第二次,
"Some Text"
"Some Text"
"Some Text"
Run Code Online (Sandbox Code Playgroud)
第三次等
要修复它,我必须初始化结果:
begin
Result := '';
if(ACondition) then
AppendInfo('Some Text');
end;
Run Code Online (Sandbox Code Playgroud)
是否需要初始化字符串函数结果?为什么(技术上)?为什么编译器不会发出警告"W1035函数的返回值'xxx'可能是未定义的"字符串函数?我是否需要遍历所有代码以确保设置值,因为如果未明确设置结果,则期望函数中的空字符串不可靠?
我在一个新的测试应用程序中对此进行了测试,结果是一样的.
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
S: string;
begin
for i := 1 to 5 do
S := GenerateInfo;
ShowMessage(S); // 5 …Run Code Online (Sandbox Code Playgroud) 从另一个Moose对象创建实例的正确方法是什么?在实践中,我已经看到了很多方面:
$obj->meta->name->new()
$obj->new() ## which has been deprecated and undeprecated
(blessed $obj)->new()
-- and, its bastard variant: (ref $obj)->new()
$obj->meta->new_object()
Run Code Online (Sandbox Code Playgroud)
我需要通过PHP脚本通过SFTP上传文件。我认为cURL可能就是这样,因为我可以在服务器上使用它。
有谁知道如何使用身份密钥身份验证将cURL用于SFTP的示例?
-编辑-
我刚刚注意到HTTP PUT可能是一种替代方法,但是它的安全性如何?
我必须实现一个带迭代器的函数.迭代器必须取消引用某个类型,比如int:
template<typename iter>
void f(iter i) {
// do something here ...
int t = *i;
// do something here ...
}
Run Code Online (Sandbox Code Playgroud)
这段代码的问题在于,如果用户调用这样的函数
vector<string> v;
v.push_back("aaa");
f(v.begin());
Run Code Online (Sandbox Code Playgroud)
他会看到错误指向我的代码中的某个位置,而不是他的代码(这会让他感到困惑).我希望错误出现在用户代码中以简化调试.
在展示公司徽标时,我今天看到了新的东西.
它们设置高度和宽度并溢出:隐藏在h1标签上,并在h1标签内的标签上设置负边距,以防止文本显示.
代码看起来像这样
<h1 class='logo'><a href='/'>Company Name</a></h1>
Run Code Online (Sandbox Code Playgroud)
css看起来像这样:
.logo {
text-indent: -9999em;
overflow: hidden;
text-align: left;
background-image: url(/images/logo.png);
background-repeat: no-repeat;
background-position: 0% 0%;
width: 253px;
height: 80px;
float: left;
margin-left: 10px;
}
.logo a {
display: block;
width: 253px;
height: 80px;
}
Run Code Online (Sandbox Code Playgroud)
我总是更喜欢在a标签内部使用span并将其设置为display:none的方法.
我的代码看起来像这样:
<h1 class='logo'><a href='/'><span>Company Name</span></a></h1>
Run Code Online (Sandbox Code Playgroud)
我的CSS看起来像这样:
.logo {
background: url(/images/logo.png) top left no-repeat;
margin-left: 10px;
a {
display: block;
width: 253px;
height: 80px;
span {
display:none;
}
}
}
Run Code Online (Sandbox Code Playgroud)
忽略我的嵌套CSS看起来更干净的事实,我是否正在用我的额外跨度和显示做正确的事:无或者是否有理由将疯狂的文本缩进和其他额外的东西放在前一个程序员投入样式表中?
为清晰起见编辑:我不是要求以不同的方式显示公司徽标.使用带有公司名称的h1是一种公认的标准做法.我想我想问你用h1和css显示公司徽标的方式是什么?为什么?
有没有更好的方法来检查两个字符串数组是否具有相同的内容?
string[] first = new string[]{"cat","and","mouse"};
string[] second = new string[]{"cat","and","mouse"};
bool contentsEqual = true;
if(first.Length == second.Length){
foreach (string s in first)
{
contentsEqual &= second.Contains(s);
}
}
else{
contentsEqual = false;
}
Console.WriteLine(contentsEqual.ToString());// true
Run Code Online (Sandbox Code Playgroud) 为了读/写SLE4442存储卡,我的应用程序目前正在使用Omnikey Cardman 3021 USB读卡器,一个Sumbsembly智能卡API(外部dll),能够包装CT-API调用(指向omnikey的dll),这样我就可以在我的c#app中读/写存储卡.这里唯一的问题是Omnikey只提供了32位的CT-API.我问他们是否要生产64位版本,但他们不能打扰.
为了使我的应用程序具有64位功能,我必须使用Windows WinSCard API重写它.这里的问题是网上没有具体的例子如何做到这一点.获取工作的APDU命令几乎是不可能的,但我已经设法获得了两个略有不同的版本.几个月来我用谷歌搜索了一百遍,并且我已经设法吞噬了一起,我终于可以阅读SLE4442存储卡了.但是对于我的生活,我无法写作.
我不打算将整个代码发布到第一篇文章中(如果需要,我可以稍后再做,或提供源代码的链接).但我将概述基本步骤.
1)SCardEstablishContext
2)通过SCardListReaders获取读者姓名
3)SCardConnect
4)用SCardTransmit和APDU新字节[] {0xFF,0xB0,0,0,0}读取整个存储器;
5)用SCardTransmit验证引脚和APDU新字节[] {0xFF,0x20,0,0,3,0,0FF,0xFF,0xFF}; (注意,这确实返回0x90; 0x00作为响应,这意味着验证应该是成功的)
6)尝试用ScardTransmit和APDU写新的byte [] {0xFF,0xD6,0,0,50,1}; (尝试在内存位置50写入值1) - 我也尝试使用APDU,第一个参数是0x00和/或第二个字节是0xD0.响应从未是0x90; 0x00因此我假设在写入期间出现错误,但我无法找到返回的错误代码的任何含义.
因为我可以使用WinSCard API读取存储卡,所以必须也可以写入一个(侧面注释 - 我尝试写入的存储卡处于工作状态,我没有将它们锁定未能验证PIN码3次).
1)也许写APDU命令是错误的.可能是指令字节(第二个字节)不正确,或者存储器位置使用某种扩展编码方案.
2)也许验证命令实际上没有验证.因为在命令本身很好,这就是为什么返回0x90,但我必须先调用或设置一些东西.
3)只是预感,但我认为这是真正的罪魁祸首.在谷歌搜索时,我确实发现一些模糊的引用,必须使用参数IOCTL_SMARTCARD_SET_CARD_TYPE调用SCardControl方法并将卡类型设置为SLE4442.但是在任何地方都没有任何工作示例,我的试错法测试导致了失败.我得到"无法正确解释一个或多个提供的参数." 还有一些其他错误信息,不记得它们都是什么.假设我从谷歌代码中复制粘贴的代码具有错误代码的正确描述.
我需要的是有人发布或指导我使用WinSCard API读取/写入SLE4442的c#中具有完整+工作代码的站点,它必须在32位和64位环境中工作.代码不一定是万无一失的 - 例如.很好地处理每个可能的错误情况.我应该能够自己做到这一点.但如果是(包括APDU命令结果描述 - 例如.0x90; 0x00成功,但0x6B; 0x4D是...等......)则更好.
所以我正在编写一个快速的perl脚本来清理一些HTML代码并通过html - > pdf程序运行它.我希望尽可能少地丢失信息,所以我想扩展我的textareas以适应当前所有的文本.这意味着,在我的情况下,根据文本框内的字符串值将行数设置为计算值.
这是我正在使用的正则表达式
$file=~s/<textarea rows="(.+?)"(.*?)>(.*?)<\/textarea>/<textarea rows="(?{ length($3)/80 })"$2>$3<\/textarea>/gis;
Run Code Online (Sandbox Code Playgroud)
不幸的是,Perl似乎没有意识到我被告知的是在搜索和替换正则表达式中嵌入Perl代码的语法是否有任何Perl迷们愿意告诉我我做错了什么?此致,扎克
我有一个用C(而不是C++)实现的遗留代码.我希望能够从我的C#代码(在Windows上)中调用此C代码中的一些方法.这两种语言之间接口的最佳方法是什么?请注意,C中的方法不是无状态的.我们需要调用两种方法:
注意:这两个方法实际上调用了其他几个方法,但这些只是我们要向C#公开的两个方法(代码非常复杂,这就是为什么我们不想移植到C#)
我已经能够将c代码导入visual studio并能够成功编译代码.我知道我们可以将C代码实现为windows服务,但我正在寻找一种允许我们直接从C#调用C方法的解决方案.任何指针都非常感谢!(COM互操作与我要做的事情有关吗?)