Как преобразовать строку запроса в HMACSHA256 в веб-матрице

Приведенный ниже код не работает в webmatrix... (не работает только часть kvps)

@using System;
@using System.Collections.Generic;
@using System.Linq;
@using System.Web;
@using System.Configuration;
@using System.Text.RegularExpressions;
@using System.Collections.Specialized;
@using System.Security.Cryptography;
@using System.Text;
@using Newtonsoft.Json;

@{
    Func<string, bool, string> replaceChars = (string s, bool isKey) =>
    {
        string output = (s.Replace("%", "%25").Replace("&", "%26")) ?? "";

        if (isKey)
        {
            output = output.Replace("=", "%3D");
        }

        return output;
    };
//This part is not working...
    var kvps = Request.QueryString.Cast<string>()
    .Select(s => new { Key = replaceChars(s, true), Value = replaceChars(Request.QueryString[s], false) })
    .Where(kvp => kvp.Key != "signature" && kvp.Key != "hmac")
    .OrderBy(kvp => kvp.Key)
    .Select(kvp => "{kvp.Key}={kvp.Value}");

var hmacHasher = new HMACSHA256(Encoding.UTF8.GetBytes((string)AppState["secretKey"]));
var hash = hmacHasher.ComputeHash(Encoding.UTF8.GetBytes(string.Join("&", kvps)));
var calculatedSignature = BitConverter.ToString(hash).Replace("-", "");

}

тот же код хорошо работает в приложении Visual Studio MVC. единственное изменение - это знак "$" в переменной kvps... когда в веб-матрицу добавляется $, это подчеркивает волнистый красный цвет

var kvps = Request.QueryString.Cast<string>()
.Select(s => new { Key = replaceChars(s, true), Value = replaceChars(Request.QueryString[s], false) })
.Where(kvp => kvp.Key != "signature" && kvp.Key != "hmac")
.OrderBy(kvp => kvp.Key)
.Select(kvp => $"{kvp.Key}={kvp.Value}");

1 ответ

Решение

$ новое в C# 6.0. Это оператор для интерполяции строк. Итак, что-то вроде:

$"{kvp.Key}={kvp.Value}"

Означает буквально заменить kvp.Key а также kvp.Value со значениями этих идентификаторов в строке. В меньших версиях C# вам нужно сделать:

String.Format("{0}={1}", kvp.Key, kvp.Value)
Другие вопросы по тегам