https://www.cnblogs.com/lonelyxmas/p/5087096.html Windows 7注册表时抛出“不允许所请求的注册表访问权”的解决办法
一、注册表读写等操作
//-------- 注册表项读取和写入
private void WriteRegedit(string name, string value)
{
RegistryKey rk = Registry.LocalMachine.OpenSubKey("SOFTWARE", true).CreateSubKey(regeditProjectName);
rk.SetValue(name, value);
}
private string GetRegedit(string name)
{
RegistryKey rk = Registry.LocalMachine.OpenSubKey("SOFTWARE", true).OpenSubKey(regeditProjectName);
string token = rk.GetValue(name).ToString();
//
return "";
}
private bool IsRegeditExist(string name)
{
RegistryKey rk = Registry.LocalMachine.OpenSubKey("SOFTWARE", true).OpenSubKey(regeditProjectName, RegistryKeyPermissionCheck.);
string[] skNameArr = rk.GetSubKeyNames();
foreach (var skname in skNameArr)
{
if (skname == name)
{
return true;
}
}
return false;
}
private void DeleteRegedit(string name)
{
RegistryKey rk = Registry.LocalMachine.OpenSubKey("SOFTWARE", true).OpenSubKey(regeditProjectName);
string[] skNameArr = rk.GetSubKeyNames();
foreach (var skname in skNameArr)
{
if(skname == name)
{
rk.DeleteSubKeyTree(name);
}
}
}
二、C# 使用HttpWebRequest发送 POST form表单
public static string PostFormRequest(string url, List<FormItemModel> formItems, CookieContainer cookieContainer = null, string refererUrl = null, Encoding encoding = null, int timeOut = 20000)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
#region 初始化请求对象
request.Method = "POST";
request.Timeout = timeOut;
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
request.KeepAlive = true;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36";
if (!string.IsNullOrEmpty(refererUrl))
request.Referer = refererUrl;
if (cookieContainer != null)
request.CookieContainer = cookieContainer;
#endregion
string boundary = "----" + DateTime.Now.Ticks.ToString("x");//分隔符
request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);
//请求流
var postStream = new MemoryStream();
#region 处理Form表单请求内容
//是否用Form上传文件
var formUploadFile = formItems != null && formItems.Count > 0;
if (formUploadFile)
{
//文件数据模板
string fileFormdataTemplate =
"\r\n--" + boundary +
"\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"" +
"\r\nContent-Type: application/octet-stream" +
"\r\n\r\n";
//文本数据模板
string dataFormdataTemplate =
"\r\n--" + boundary +
"\r\nContent-Disposition: form-data; name=\"{0}\"" +
"\r\n\r\n{1}";
foreach (var item in formItems)
{
string formdata = null;
if (item.IsFile)
{
//上传文件
formdata = string.Format(
fileFormdataTemplate,
item.Key, //表单键
item.FileName);
}
else
{
//上传文本
formdata = string.Format(
dataFormdataTemplate,
item.Key,
item.Value);
}
//统一处理
byte[] formdataBytes = null;
//第一行不需要换行
if (postStream.Length == 0)
formdataBytes = Encoding.UTF8.GetBytes(formdata.Substring(2, formdata.Length - 2));
else
formdataBytes = Encoding.UTF8.GetBytes(formdata);
postStream.Write(formdataBytes, 0, formdataBytes.Length);
//写入文件内容
if (item.FileContent != null && item.FileContent.Length > 0)
{
using (var stream = item.FileContent)
{
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
{
postStream.Write(buffer, 0, bytesRead);
}
}
}
}
//结尾
var footer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
postStream.Write(footer, 0, footer.Length);
}
else
{
request.ContentType = "application/x-www-form-urlencoded";
}
#endregion
request.ContentLength = postStream.Length;
#region 输入二进制流
if (postStream != null)
{
postStream.Position = 0;
//直接写入流
Stream requestStream = request.GetRequestStream();
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0)
{
requestStream.Write(buffer, 0, bytesRead);
}
postStream.Close();//关闭文件访问
}
#endregion
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (cookieContainer != null)
{
response.Cookies = cookieContainer.GetCookies(response.ResponseUri);
}
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader myStreamReader = new StreamReader(responseStream, encoding ?? Encoding.UTF8))
{
string retString = myStreamReader.ReadToEnd();
return retString;
}
}
}
需要定义FormItemModel 类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace RibbonSimplePad
{
//-------- 发送表单数据
public class FormItemModel
{
public string Key { get; set; }
public string Value { get; set; }
public bool IsFile
{
get
{
if (FileContent == null || FileContent.Length == 0) return false;
if (FileContent != null && FileContent.Length > 0 && string.IsNullOrWhiteSpace(FileName))
{
throw new Exception("上传文件时 FileName 属性值不能为空");
}
return true;
}
}
public string FileName { get; set; }
public Stream FileContent { get; set; }
}
}
使用方法:
//-------- 发送用户认证请求 方法
private void SendAuthorizationRequest()
{
string url = "http://customa.test/api/authorizations";
List<FormItemModel> formItems = new List<FormItemModel>();
formItems.Add(new FormItemModel(){
Key = "username",
Value = "Dr. Jaiden Hartmann I",
});
formItems.Add(new FormItemModel(){
Key = "password",
Value = "secret",
});
string result = PostFormRequest(url, formItems);
Console.WriteLine(result);
}
三、JSON 对象与json字符串转换类设计
Newtonsoft.Json.dll
Newtonsoft.Json.dll在.net2.0之后的版本可以支持 我的版本.net framework4.0
添加Newtonsoft.json的引用
其它方法可参考:https://www.cnblogs.com/JiYF/p/8628942.html
class JsonNewtonsoft
{
/// <summary>
/// 把对象转换为JSON字符串
/// </summary>
/// <param name="o">对象</param>
/// <returns>JSON字符串</returns>
public static string ToJSON(this object o)
{
if (o == null)
{
return null;
}
return JsonConvert.SerializeObject(o);
}
/// <summary>
/// 把Json文本转为实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="input"></param>
/// <returns></returns>
public static T FromJSON<T>(this string input)
{
try
{
return JsonConvert.DeserializeObject<T>(input);
}
catch (Exception ex)
{
return default(T);
}
}
}