zoukankan      html  css  js  c++  java
  • 可嵌入式的动态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

    (组件许可任何个人或企业免费使用)

  • 相关阅读:
    VTIL & NoVmp 源码简要分析
    无需 Root 使用 IDA 调试 Android Native
    QWB 2021 StandOnTheGaints Writeup
    外部调用可执行文件中的函数
    CISCN 2021 西南赛区 Fix Writeup
    CISCN 2021 西南赛区 Reverse Writeup
    AES Block Cipher Implementation in C
    MTCTF 2021 Inject Writeup
    【题解】电子科技大学第十九届 ACM 程序设计竞赛
    洛谷P2596 [ZJOI2006]书架
  • 原文地址:https://www.cnblogs.com/smark/p/3783307.html
Copyright © 2011-2022 走看看