1. 程式人生 > 其它 >http服務(postman呼叫方法及反參)

http服務(postman呼叫方法及反參)

#region 監聽url

#region 監聽url路徑請求
static HttpListener httpobj;
private void listeningUrl()
{
//提供一個簡單的、可通過程式設計方式控制的 HTTP 協議偵聽器。此類不能被繼承。
httpobj = new HttpListener();
//定義url及埠號,通常設定為配置檔案
httpobj.Prefixes.Add("http://*:9000/");
//啟動監聽器
httpobj.Start();
//非同步監聽客戶端請求,當客戶端的網路請求到來時會自動執行Result委託
//該委託沒有返回值,有一個IAsyncResult介面的引數,可通過該引數獲取context物件
httpobj.BeginGetContext(Result, null);
//MessageBox.Show("服務端初始化完畢...");
}
#endregion

#region 監聽URL方法實現
public void Result(IAsyncResult ar)
{
//當接收到請求後程序流會走到這裡

//繼續非同步監聽
httpobj.BeginGetContext(Result, null);
var guid = Guid.NewGuid().ToString();
Console.ForegroundColor = ConsoleColor.White;
//獲得context物件
var context = httpobj.EndGetContext(ar);
var request = context.Request;
var response = context.Response;


context.Response.ContentType = "text/plain;charset=UTF-8";//告訴客戶端返回的ContentType型別為純文字格式,編碼為UTF-8
context.Response.AddHeader("Content-type", "text/plain");//新增響應頭資訊
context.Response.ContentEncoding = Encoding.UTF8;
string returnObj = null;//定義返回客戶端的資訊
if (request.HttpMethod == "POST" && request.InputStream != null)
{
Stream stream = request.InputStream;
System.IO.StreamReader reader = new System.IO.StreamReader(stream, Encoding.UTF8);
string body = reader.ReadToEnd();

string ReturnData = btnSend(body);//呼叫C#要觸發的方法
//處理客戶端傳送的請求並返回處理資訊
returnObj = HandleRequest(ReturnData, response);
// Encode= Base64Encode(returnObj);
}
else
{
returnObj = $"不是post請求或者傳過來的資料為空";
}
var returnByteArr = Encoding.UTF8.GetBytes(returnObj);//設定客戶端返回資訊的編碼
try
{
using (var stream = response.OutputStream)
{
//把處理資訊返回到客戶端
stream.Write(returnByteArr, 0, returnByteArr.Length);
}
}
catch (Exception ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"網路蹦了:{ex.ToString()}");
}
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"請求處理完成:{guid},時間:{ DateTime.Now.ToString()}\r\n");
}

private static string HandleRequest(string request, HttpListenerResponse response)
{

StringBuilder jsonPeoples = new StringBuilder();
string error = string.Empty;//錯誤資訊
int code = 0;//成功失敗
string message = string.Empty;//成功失敗狀態
try
{
code = 200;
message = "操作成功";
response.StatusDescription = "200";//獲取或設定返回給客戶端的 HTTP 狀態程式碼的文字說明。
response.StatusCode = 200;// 獲取或設定返回給客戶端的 HTTP 狀態程式碼。
Console.ForegroundColor = ConsoleColor.Green;
//獲取得到資料data可以進行其他操作
}
catch (Exception ex)
{
code = 404;
message = "系統異常,請稍後再試";
response.StatusDescription = "404";
response.StatusCode = 404;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"在接收資料時發生錯誤:{ex.ToString()}");
error = ex.ToString();
return $"在接收資料時發生錯誤:{ex.ToString()}";//把服務端錯誤資訊直接返回可能會導致資訊不安全,此處僅供參考
}

jsonPeoples.Append("{");
jsonPeoples.AppendFormat("\"code\":\"{0}\",\"message\":\"{1}\", \"result\":\"{2}\", \"error\":\"{3}\"", code, message, request, error);
jsonPeoples.Append("}");
return jsonPeoples.ToString();
}
#endregion

#endregion