sudo tailf /var/log/messages
https://raskeyconverter.azurewebsites.net/XmlToPem?handler=ConvertPEM
Khi code WCF Rest mà client submit POST request với dạng application/x-www-form-urlencoded thì code như sau:
Khai báo input đầu vào là kiểu Stream. Sau đó read string ra 1 biến vì khi POST dạng application/x-www-form-urlencoded thì các tham số request sẽ được format kiểu key1=value1&key2=value2
Do đó chỉ cần read ra 1 chuỗi string, sau đó bóc tách từng cặp key value để xử lý.
Nguồn: https://social.msdn.microsoft.com/Forums/vstudio/en-US/2a1b5690-fb2c-4303-a122-fe99d383be7c/how-to-accept-applicationxwwwformurlencoded?forum=wcf
public Stream ProcessArbitraryInput(Stream input)
{
string strInput = new StreamReader(input).ReadToEnd();
string htmlResult = @"<html><head><title>Result</title></head>
<body>
<h1>First: {{first}}</h1>
<h1>Second: {{second}}</h1>
</body></html>";
Regex inputRegex = new Regex(@"First=([^\&]+)\&Second=(.+)");
Match match = inputRegex.Match(strInput);
string first, second;
if (match.Success)
{
first = match.Groups[1].Value.Replace('+', ' ');
second = match.Groups[2].Value.Replace('+', ' ');
}
else
{
first = second = "Error";
}
htmlResult = htmlResult.Replace("{{first}}", first).Replace("{{second}}", second);
WebOperationContext.Current.OutgoingResponse.ContentType = "text/html";
return new MemoryStream(Encoding.UTF8.GetBytes(htmlResult));
}
Dưới đây là cách chuyển 1 chuỗi số thành chữ. Thường dùng trong trường hợp xử lý hóa đơn điện tử, các API của nhà cung cấp có thể yêu cầu chuyển số tiền thành chữ gửi vào input
Tham khảo: https://xuanthulab.net/code-c-chuyen-so-thanh-chu.html#
using System; namespace XTL { public static class Utils { ////// Chuyển phần nguyên của số thành chữ /// /// Số double cần chuyển thành chữ ///Chuỗi kết quả chuyển từ số public static string NumberToText(double inputNumber, bool suffix = true) { string[] unitNumbers = new string[] { "không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín" }; string[] placeValues = new string[] { "", "nghìn", "triệu", "tỷ" }; bool isNegative = false; // -12345678.3445435 => "-12345678" string sNumber = inputNumber.ToString("#"); double number = Convert.ToDouble(sNumber); if (number < 0) { number = -number; sNumber = number.ToString(); isNegative = true; } int ones, tens, hundreds; int positionDigit = sNumber.Length; // last -> first string result = " "; if (positionDigit == 0) result = unitNumbers[0] + result; else { // 0: ### // 1: nghìn ###,### // 2: triệu ###,###,### // 3: tỷ ###,###,###,### int placeValue = 0; while (positionDigit > 0) { // Check last 3 digits remain ### (hundreds tens ones) tens = hundreds = -1; ones = Convert.ToInt32(sNumber.Substring(positionDigit - 1, 1)); positionDigit--; if (positionDigit > 0) { tens = Convert.ToInt32(sNumber.Substring(positionDigit - 1, 1)); positionDigit--; if (positionDigit > 0) { hundreds = Convert.ToInt32(sNumber.Substring(positionDigit - 1, 1)); positionDigit--; } } if ((ones > 0) || (tens > 0) || (hundreds > 0) || (placeValue == 3)) result = placeValues[placeValue] + result; placeValue++; if (placeValue > 3) placeValue = 1; if ((ones == 1) && (tens > 1)) result = "một " + result; else { if ((ones == 5) && (tens > 0)) result = "lăm " + result; else if (ones > 0) result = unitNumbers[ones] + " " + result; } if (tens < 0) break; else { if ((tens == 0) && (ones > 0)) result = "lẻ " + result; if (tens == 1) result = "mười " + result; if (tens > 1) result = unitNumbers[tens] + " mươi " + result; } if (hundreds < 0) break; else { if ((hundreds > 0) || (tens > 0) || (ones > 0)) result = unitNumbers[hundreds] + " trăm " + result; } result = " " + result; } } result = result.Trim(); if (isNegative) result = "Âm " + result; return result + (suffix ? " đồng chẵn" : ""); } } }
Một cách khác
Tham khảo: https://tuoitreit.vn/threads/chuyen-so-sang-chu-c.41013/
private string ChuyenSo(string number)
{
string[] dv = { "", "mươi", "trăm", "nghìn", "triệu", "tỉ"};
string[] cs = { "không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín" };
string doc;
int i, j, k, n, len, found, ddv, rd;
len = number.Length;
number += "ss";
doc = "";
found=0;
ddv=0;
rd=0;
i = 0;
while (i < len)
{
//So chu so o hang dang duyet
n = (len - i + 2) % 3 + 1;
//Kiem tra so 0
found = 0;
for (j = 0; j < n; j++)
{
if (number[i + j] != '0')
{
found = 1;
break;
}
}
//Duyet n chu so
if (found == 1)
{
rd = 1;
for (j = 0; j < n; j++)
{
ddv=1;
switch(number[i+j])
{
case '0':
if (n-j==3) doc+=cs[0]+" ";
if (n-j==2)
{
if (number[i+j+1]!='0') doc+="lẻ ";
ddv=0;
}
break;
case '1':
if (n-j==3) doc+=cs[1] + " ";
if (n-j==2)
{
doc+="mười ";
ddv=0;
}
if (n-j==1)
{
if (i + j == 0) k = 0;
else k = i + j - 1;
if (number[k]!='1' && number[k]!='0')
doc += "mốt ";
else
doc+=cs[1]+" ";
}
break;
case '5':
if (i+j==len-1)
doc+="lăm ";
else
doc+=cs[5]+" ";
break;
default:
doc+=cs[(int)number[i+j]-48]+" ";
break;
}
//Doc don vi nho
if (ddv==1)
{
doc+=dv[n-j-1]+" ";
}
}
}
//Doc don vi lon
if (len-i-n>0)
{
if ((len - i - n ) % 9 == 0)
{
if (rd==1)
for (k = 0; k < (len - i - n) / 9; k++)
doc += "tỉ ";
rd=0;
}
else
if (found!=0) doc+=dv[((len-i-n+1)%9)/3+2]+" ";
}
i+=n;
}
if (len == 1)
if (number[0] == '0' || number[0] == '5') return cs[(int)number[0] - 48];
return doc;
}