我遇到了WS-Security的问题,并创建了一个正确的随机数和密码摘要.
我成功使用SoapUI将数据发送到Oracle系统.所以我能够拦截SoapUI的调用(将代理更改为127.0.0.1端口8888以使用Fiddler失败,因为它是通过SSL) - 拦截非常重要,因为这些值只能使用一次.然后我可以抓取nonce,创建时间戳和密码摘要将它们放入我的代码中(我只有30秒才能完成这个,因为值不会持续!)并且我获得了成功.
所以我知道它不是别的 - 只是密码摘要.
我使用的值如下:
Nonce: UIYifr1SPoNlrmmKGSVOug==
Created Timestamp: 2009-12-03T16:14:49Z
Password: test8
Required Password Digest: yf2yatQzoaNaC8BflCMatVch/B8=
Run Code Online (Sandbox Code Playgroud)
我知道创建摘要的算法是:
Password_Digest = Base64 ( SHA-1 ( nonce + created + password ) )
Run Code Online (Sandbox Code Playgroud)
使用以下代码(来自Rick Strahl的帖子)
protected string GetSHA1String(string phrase)
{
SHA1CryptoServiceProvider sha1Hasher = new SHA1CryptoServiceProvider();
byte[] hashedDataBytes = sha1Hasher.ComputeHash(Encoding.UTF8.GetBytes(phrase));
return Convert.ToBase64String(hashedDataBytes);
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
GetSHA1String("UIYifr1SPoNlrmmKGSVOug==" + "2009-12-03T16:14:49Z" + "test8") = "YoQKI3ERlMDGEXHlztIelsgL50M="
Run Code Online (Sandbox Code Playgroud)
我尝试了各种SHA1方法,都返回相同的结果(我猜这是件好事!):
SHA1 sha1 = SHA1.Create();
SHA1 sha1 = SHA1Managed.Create();
// Bouncy Castle:
protected string GetSHA1usingBouncyCastle(string phrase)
{
IDigest …
Run Code Online (Sandbox Code Playgroud) 这可能是一种可怕的做事方式,但无论如何......
我想从对象本身重新初始化一个对象.
我有一个名为的对象Quote
,其中一个方法是Calculate()
,它做了很多事情.有一件事是,如果某些主要属性发生变化,我们称之为大变革,我们需要创建一个新的Quote(不只是更新现有的).
在Calculate()
它的中间,这样做真的很容易(IMO):
public class Quote {
public bool Calculate() {
//... do lots of things
if(IsBigChange) {
this = new Quote();
}
//... do more things
// later when it is saved it will be a new quote
}
}
Run Code Online (Sandbox Code Playgroud)
Calculate()
从许多地方调用,所以如果你知道我的意思,我不想在检测到Big Change时将其踢出并在"外部"创建新对象.
所以,如果你不能设置this
,是否有其他方法可以实现相同的结果?
当你使用MVC Razor时,你经常会写@ Url.Content("〜/ images/someimage.png")并且你在那个字符串上获得intellisense - 它以某种方式知道它是一条路径.
我为Url.Content()创建了一个扩展方法,但在输入path参数时它没有获得intellisense.
有没有人知道你是否有某种属性可以放在参数上,或者是否有更好的方法(覆盖?)我可以切入并更改默认的Url.Content的行为?
public static string ContentExtended(this UrlHelper urlHelper, string contentPath)
{
string result = urlHelper.Content(contentPath);
// do stuff here to remove application folder name on godaddy hosting
return result;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我使用resharper,只是意识到这可能是一个特定于resharper的功能,常规VS用户实际上没有.我禁用了Resharper intellisense,并且只启用了常规的VS intellisense,并且路径特定的自动完成功能无效.所以这是一个resharper功能,而不是编程问题