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

smark發表於2014-06-12
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

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

相關文章