可嵌入式的動態http服務minihttp組件


minihttp是基於c#實現的輕量級的動態WEB服務組件,通過minihttp可以輕松地構一個動態的WEB服務並嵌入到.NET程序中運行部署.由於minihttp完全基於托管代碼實現,所以可以輕松運行在windows .net和 linux mono之間而不需要調整任何代碼.為了方便處理動態功能minihttp還提供基礎的MVC開發模式,並支持Razor視圖模板從而讓實現動態功能更簡單.

功能描述

  • 支持 .net和mono平台下運行
  • 暫只支持GET和POST功能
  • 支持MVC和Razor

構建WEB服務

minihttp構建一個web服務非常簡單,只需要通過調用HttpHost.CreateHttpServer創建IHttpServer,並調用相關Open方法即可開啟服務功能.

    IHttpServer server = HttpHost.CreateHttpServer();
            server.Prefixes.Add("http://*:80/");
            //server.ServerPath += "Web" + System.IO.Path.DirectorySeparatorChar;
            server.Open();

以上代碼就是在所有IP的80端口開啟服務,如果在不指定ServerPath的前提下,目錄指向當前程序域運行的目錄.

使用MVC功能

minihttp構建的出發點就是用於提供一個服務程序方便實現WEB管理功能而存在,所以minihttp支持動態處理是最基礎的功能需求.為了讓開發人員更好地編寫動態數據處理,minihttp集成了基礎的mvc功能和Razor視圖模板支持.

Hello World

以下是制定一個簡單的Hello Word頁面,主要功能是用戶提交自己的名字然后顯示出來.
  • Action
           public ActionResult HelloWorld(string name)
            {
                return View("/views/helloworld", name);
            }
  • View
    <h2>Hello World</h2>
    <form method="post" action="/helloworld">
        <div class="input-group">
            <span class="input-group-addon">輸入名字:</span>
            <input type="text" class="form-control" name="name" placeholder="Username">
           
        </div>
        <br />
         <div class="input-group">
         <button type="submit" class="btn btn-default" style="float:right;">提交</button>
             </div>
    </form>
    <br />
     <div class="input-group">
            <span class="input-group-addon">hello:</span>
           <span class="form-control">@Model</span>
        </div>

在使用上基本兼容asp.net mvc模式,定義相應的方法並返回指定的view和model.

參數綁定

提供Action參數定功能,支持值類型和類模型,也提供自定義綁定描述擴展.minihttp是通過提交數據的名稱來進行數據綁定映射,並提供大量的默認綁定器來滿足大部分情況的需要.下面簡單介紹一下如何綁定一個類模型

  • Model
        public class Register
        {
            public string Name { get; set; }
            public string EMail { get; set; }
            public string Password { get; set; }
        }
  • Action
      public ActionResult Register(Models.Register register)
            {
                return View("/views/register", register);
            }
  • View
    @{
        minihttp.quickstart.Web.Models.Register reg = (minihttp.quickstart.Web.Models.Register)Model;
    }
    <h2>數據綁定</h2>
    <form method="post" action="/register">
          <div class="input-group">
            <span class="input-group-addon InputLabel">用戶名:</span>
            <input type="text" class="form-control" name="name" placeholder="Username">
           
        </div>
         <br />
          <div class="input-group">
            <span class="input-group-addon InputLabel">郵件:</span>
            <input type="text" class="form-control" name="email" placeholder="Username">
           
        </div>
         <br />
          <div class="input-group">
            <span class="input-group-addon InputLabel">密碼:</span>
            <input type="text" class="form-control" name="password" placeholder="Username">
           
        </div>
         <br />
         <div class="input-group">
         <button type="submit" class="btn btn-default" style="float:right;">提交</button>
             </div>
    </form>
    <h3>提交數據</h3>
     <div class="input-group">
            <span class="input-group-addon InputLabel">用戶名:</span>
           <span class="form-control">@reg.Name</span>
        </div>
     <br />
     <div class="input-group">
            <span class="input-group-addon InputLabel">郵件:</span>
           <span class="form-control">@reg.EMail</span>
        </div>
     <br />
     <div class="input-group">
            <span class="input-group-addon InputLabel">密碼:</span>
           <span class="form-control">@reg.Password</span>
        </div>

常用需求都可以通過自動化綁來簡化提交數據的獲取,這樣可以大大節省這方面的工作量.

子模板

子模板可以便於共享視圖,這樣就可以有利於視圖的復用,對些minihttp也提供了對它的支持.

  • View
    <h2>子模板</h2>
    @{
        var data = new {User= new minihttp.quickstart.Web.Models.User(){ Name="sdf",EMail="sdfsd",Address="sdfsdf",Phone="12345"}};
    }
    @RenderPage("/views/controls/userinfo",data)
  • ChileView
    <div class="input-group">
            <span class="input-group-addon InputLabel">用戶名:</span>
           <span class="form-control">@ViewData.User.Name</span>
        </div>
     <br />
     <div class="input-group">
            <span class="input-group-addon InputLabel">郵件:</span>
           <span class="form-control">@ViewData.User.EMail</span>
        </div>
     <br />
     <div class="input-group">
            <span class="input-group-addon InputLabel">地址:</span>
           <span class="form-control">@ViewData.User.Address</span>
        </div>
     <br />
     <div class="input-group">
            <span class="input-group-addon InputLabel">地址:</span>
           <span class="form-control">@ViewData.User.Phone</span>
        </div>
     <br />

MasterPage

該功能也是minihttp所支持的功能,主要是方便統一處理頁面布局,其使用方式和asp.net mvc一致.可以通過以下方式統一設置所有頁面的masterpage布局.

server.MasterPage = "/views/layer/master";

master頁面通過 @RenderBody()來指定頁面輸出的方式.

 

<div id="main">
            <div id="start-menu">
                <div class="panel panel-default">
                    <div class="panel-heading">Start</div>
                    <div class="panel-body">
                        <ul>
                            <li><a href="/helloworld">Hello World</a></li>
                            <li><a href="/Register">數據綁定</a></li>
                            <li><a href="/Control">子模板</a></li>
                              <li><a href="/datalist">數據列表</a></li>
                        </ul>
                    </div>
                </div>
            </div>
            <div id="center">
                @RenderBody()

            </div>
            <div style="clear: both;" />
        </div>

下載

Lib

quick start

demo

(組件許可任何個人或企業免費使用)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM