我已经看过很多关于此的问题,但却看不到我犯的错误。我正在尝试生成共享访问签名以访问Azure SB队列。
我的C#代码工作正常:
var expiry = 1499177142;// GetExpiry();
string stringToSign = HttpUtility.UrlEncode(resourceUri);// + "\n" + expiry;
HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key));
Console.WriteLine(Encoding.UTF8.GetBytes(stringToSign));
var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
Console.WriteLine(signature);
var sasToken = String.Format(CultureInfo.InvariantCulture, "SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}",
HttpUtility.UrlEncode(resourceUri), HttpUtility.UrlEncode(signature), expiry, keyName);
return sasToken;
// returns slXBw0u7Dt/YKS1Y+Wot02z730YXJ9NkS599JRzvDQI= for the signature element
我的PHP给出了一个非常不同的结果:
$stringToSign = rawurlencode($resourceURI);// . "%0A" . $expiry;
$sig = hash_hmac("sha256",utf8_encode($stringToSign),utf8_encode($key),false);
echo $sig."<br>";
$token = "SharedAccessSignature sr=".urlencode($resourceURI)
."&sig=".rawurlencode(base64_encode($sig))."&se=".$expiry."&skn=".$keyName;
return $token; //returns MGNlZWViYWRmMjE2NWJhZGRjNWNhNDZkYWRlOTQyMzc3ODBhMWM2ZjA1OTk4MjI0MGUzMzllZmY4ZTk2OGUxNA==
我已尝试对$stringToSign
和$key
进行编码,而不是strtoupper
上的哈希,strtolower
和$stringToSign
,但可以&#39;得到的结果与C#
答案 0 :(得分:1)
此代码应该在PHP和C#中工作。
PHP:
<form role="form" id="sendAddress" th:action=@{/sendAddress} method="post">
<select class="form-control" name="*nameOfCity*">
<option value="">Select City</option>
<option value="HYD">Hyderabad</option>
<option value="MUM">Mumbai</option>
<option value="DEL">Delhi</option>
</select>
</form>
在C#中
@RequestMapping(value={"/sendAddress"}, method = RequestMethod.POST)
public String messageCenterHome(**@RequestParam** String *nameOfCity*) {
// value of nameOfCity is now value of "nameOfCity" paramter,
// that is, the value of the option tag selected
// return view
}