最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# 網(wǎng)絡編程之http

 更新時間:2021年02月19日 10:47:38   作者:seabluescn  
這篇文章主要介紹了c# 提供一個HTTP服務的實現(xiàn)示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下

一、概述

本文目的是通過C#代碼提供一個HTTP服務,正常情況下如果我們需要向外界提供HTTP服務,常規(guī)做法就是通過ASP.NET來實現(xiàn),有時我們的應用程序或Windows服務需要向外提供一些簡單的HTTP服務就可以自己實現(xiàn),從而避免部署IIS增加系統(tǒng)復雜性。這里必須強調(diào)是一些簡單的應用,如果應用比較復雜,涉及到路徑解析HTML解析等,還是用WEB方式實現(xiàn)比較靠譜。

將HTTP和UDP、TCP放在同一個系列實際上有一點不合適,因為UDP、TCP屬于傳輸層協(xié)議,HTTP屬于應用層協(xié)議,希望讀者首先有一個明確的了解。

二、 提供服務

首先啟動HHTP服務:

if (!HttpListener.IsSupported)
  {
  Console.WriteLine("服務器操作系統(tǒng)不支持建立Http Server,需要更高版本的操作系統(tǒng)!");
  return;
  }

  HttpListener httpListener = new HttpListener();

  try
  {
  Console.WriteLine("正在啟動Http服務");
  int port = 9000;
  httpListener.Prefixes.Add($"http://*:{port}/");
  httpListener.Start();  
  Console.WriteLine("Http服務啟動成功。");
  }
  catch (Exception ex)
  {
  Console.WriteLine($"啟動Http服務出現(xiàn)異常:{ex.Message}");
  return;
  }

進行監(jiān)聽:

while (true)
  {
  Console.WriteLine("開始監(jiān)聽...");
  HttpListenerContext context = httpListener.GetContext();
  HttpListenerRequest request = context.Request;

  string Method = request.HttpMethod.ToUpper();
  Console.WriteLine($"收到請求,URL:{ request.Url} Method:{Method}");  

  Response(context, "hello");
  }

代碼循環(huán)進行監(jiān)聽,GetContext方法會引起阻塞,當收到瀏覽器請求時,服務器立即返回“Hello”。

Response方法實現(xiàn)如下:

private static void Response(HttpListenerContext context, string responseTxt)
 {
  HttpListenerResponse response = context.Response;
  response.ContentType = "html";
  response.ContentEncoding = Encoding.UTF8;

  using (Stream output = response.OutputStream)
  {
  byte[] buffer2 = Encoding.UTF8.GetBytes(responseTxt);
  output.Write(buffer2, 0, buffer2.Length);
  }
 }

此時打開瀏覽器輸入地址 http://localhosthost:9000/ 看一下能否看到結果。(如果需要通過其他機器訪問,本機要開放防火墻對應端口。)

注意:程序需要以管理員模型運行才能提供服務。

具體辦法:工程新增應用程序清單文件:app.manifest,修改配置信息如下:

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">

    <security>

      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">       

        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

      </requestedPrivileges>

    </security>

  </trustInfo>

三、 響應

通過request.HttpMethod可以取得協(xié)議類型,對于GET和POST方法將采取不同的處理方式。

通過request.RawUrl可以取得URL路徑,并進行解析,通過request.QueryString可以用戶輸入的參數(shù)值。

if (Method == "GET")
  {
   Console.WriteLine($"Get:RawURL:{ request.RawUrl}");

   if (request.RawUrl.StartsWith("/version"))
   {
   Response(context, "Simple Http Server Ver:0.11");
   continue;
   }
   else
   {
   string username = request.QueryString["username"];
   string pwd = request.QueryString["pwd"];

   Response(context, $"Welcome:{username}");
   continue;
   }
  }

以上代碼,如果輸入:http://localhost:9000?username=hahaha

輸出:Welcome:hahaha

在POST方法下,仍然可以通過request.QueryString取得用戶通過URL輸入的參數(shù),但通過Body傳輸?shù)臄?shù)據(jù)需要通過其他方式進行讀取。

if (Method == "POST")
  {
   Console.WriteLine($"POST:RawURL:{ request.RawUrl}");
   string content = GetPostInput(request);
   Console.WriteLine($"Content:{ content}");
   Response(context, "\"{'Result':'Success','Message':'Hello'}\"");
   continue;
  }

GetPostInput方法實現(xiàn)如下:

private static string GetPostInput(HttpListenerRequest request)
 {
  Stream s = request.InputStream;
  int count = 0;
  byte[] buffer = new byte[1024];
  StringBuilder builder = new StringBuilder();
  while ((count = s.Read(buffer, 0, 1024)) > 0)
  {
  builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
  }
  s.Flush();
  s.Close();
  s.Dispose();
  return builder.ToString();
 }

為了方便起見,輸入輸出的數(shù)據(jù)最好采用json格式。 

四、調(diào)試

可以通過Chrome或Postman來進行調(diào)試。 

傳送門:

C#網(wǎng)絡編程入門系列包括三篇文章:

(一)C#網(wǎng)絡編程入門之UDP

(二)C#網(wǎng)絡編程入門之TCP

(三)C#網(wǎng)絡編程入門之HTTP

以上就是c# 提供一個HTTP服務的實現(xiàn)示例的詳細內(nèi)容,更多關于c# 提供http服務的資料請關注腳本之家其它相關文章!

相關文章

  • ItemsControl 數(shù)據(jù)綁定的兩種方式

    ItemsControl 數(shù)據(jù)綁定的兩種方式

    這篇文章主要介紹了ItemsControl 數(shù)據(jù)綁定的兩種方式,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#使用RabbitMQ發(fā)送和接收消息工具類的實現(xiàn)

    C#使用RabbitMQ發(fā)送和接收消息工具類的實現(xiàn)

    RabbitMQ是一個消息的代理器,用于接收和發(fā)送消息,本文主要介紹了C#使用RabbitMQ發(fā)送和接收消息工具類的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • LINQ(語言集成查詢)使用案例

    LINQ(語言集成查詢)使用案例

    這篇文章介紹了LINQ(語言集成查詢)的使用案例,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#中的應用程序接口介紹及實現(xiàn),密封類與密封方法

    C#中的應用程序接口介紹及實現(xiàn),密封類與密封方法

    今天小編就為大家分享一篇關于C#中的應用程序接口介紹及實現(xiàn),密封類與密封方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 自定義WPF窗體形狀的實戰(zhàn)記錄

    自定義WPF窗體形狀的實戰(zhàn)記錄

    WPF是制作界面的一大利器,下面這篇文章主要給大家介紹了關于自定義WPF窗體形狀的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們一起來看看吧
    2018-09-09
  • Unity3D基于陀螺儀實現(xiàn)VR相機功能

    Unity3D基于陀螺儀實現(xiàn)VR相機功能

    這篇文章主要為大家詳細介紹了Unity3D基于陀螺儀實現(xiàn)VR相機功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 利用C#快速查出哪些QQ好友空間屏蔽了自己

    利用C#快速查出哪些QQ好友空間屏蔽了自己

    我們經(jīng)常會遇到以下情況吧:想點擊好友空間看看他最近的動態(tài),結果發(fā)現(xiàn)自己需要申請權限!別擔心,本文將為大家介紹如何利用C#快速查出哪些QQ好友空間屏蔽了自己,需要的可以參考一下
    2022-02-02
  • C#?網(wǎng)域賬號(Domain)驗證的實現(xiàn)

    C#?網(wǎng)域賬號(Domain)驗證的實現(xiàn)

    本文主要介紹了C#?網(wǎng)域賬號(Domain)驗證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-04-04
  • C#中datatable序列化與反序列化實例分析

    C#中datatable序列化與反序列化實例分析

    這篇文章主要介紹了C#中datatable序列化與反序列化,是datatable的常用技巧,需要的朋友可以參考下
    2014-09-09
  • 如何在C#?枚舉中增加行為

    如何在C#?枚舉中增加行為

    這篇文章主要介紹了如何在C#?枚舉中增加行為的相關資料,需要的朋友可以參考下
    2023-05-05

最新評論

射阳县| 拉孜县| 阜平县| 龙州县| 合水县| 文昌市| 钟山县| 信宜市| 安化县| 许昌县| 虎林市| 抚顺市| 周至县| 乌鲁木齐县| 贵定县| 防城港市| 齐河县| 旅游| 龙陵县| 涪陵区| 厦门市| 富裕县| 泸定县| 阳西县| 武强县| 隆林| 岫岩| 佛冈县| 翼城县| 新宁县| 深水埗区| 颍上县| 杨浦区| 筠连县| 佳木斯市| 涞源县| 临江市| 随州市| 南岸区| 富宁县| 多伦县|