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

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

可嵌入式的动态http服务minihttp组件的更多相关文章

  1. 基于 OSGi 的面向服务的组件编程,helloworld

    基于 OSGi 的面向服务的组件编程 OSGi(Open Services Gateway Initiative,开放服务网关协议)提供了一个面向服务组件的编程模型,基于 OSGi 编程,具有模块化, ...

  2. 基于 OSGi 的面向服务的组件编程

    作者:曹 羽中 (caoyuz@cn.ibm.com), 软件工程师, IBM中国开发中心 出处:http://www.ibm.com/developerworks/cn/opensource/os- ...

  3. 如何从零开始实现一个soa远程调用服务基础组件

    说起soa远程调用基础组件,最著名的莫过于淘宝的dubbo了,目前很多的大型互联网公司都有一套自己的远程服务调用分布式框架,或者是使用开源的(例如dubbo),或者是自己基于某种协议(例如hessia ...

  4. Zookeeper分布式服务协调组件

    1.简介 Zookeeper是一个分布式服务协调组件,是Hadoop.Hbase.Kafka的重要组件,它是一个为分布式应用提供一致性服务的组件.   Zookeeper的目标就是封装好复杂易出错的服 ...

  5. datasnap——动态注册服务类

    datasnap——动态注册服务类 在DataSnap的应用程序时,我们首先需要注册的服务器类,以提供访问客户端应用程序的服务器方法.通常的做法是使用DSServerClass组件,但有些时候,我们要 ...

  6. 基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现

    设计概述 服务端通信组件的设计是一项非常严谨的工作,其中性能.伸缩性和稳定性是必须考虑的硬性质量指标,若要把组件设计为通用组件提供给多种已知或未知的上层应用使用,则设计的难度更会大大增加,通用性.可用 ...

  7. [Asp.net core 3.1] 通过一个小组件熟悉Blazor服务端组件开发

    通过一个小组件,熟悉 Blazor 服务端组件开发.github 一.环境搭建 vs2019 16.4, asp.net core 3.1 新建 Blazor 应用,选择 asp.net core 3 ...

  8. SpringCloud学习笔记:服务支撑组件

    SpringCloud学习笔记:服务支撑组件 服务支撑组件 在微服务的演进过程中,为了最大化利用微服务的优势,保障系统的高可用性,需要通过一些服务支撑组件来协助服务间有效的协作.各个服务支撑组件的原理 ...

  9. 服务发现组件之 — Eureka

    前言 现在流行的微服务体系结构正在改变我们构建应用程序的方式,从单一的单体服务转变为越来越小的可单独部署的服务(称为微服务),共同构成了我们的应用程序.当进行一个业务时不可避免就会存在多个服务之间调用 ...

随机推荐

  1. iOS设置导航栏标题

    方法一:在UIViewController中设置self.title. 方法二:设置self.navigationItem.titleView.

  2. H5学习系列之文件读取API--本文转自http://blog.csdn.net/jackfrued/article/details/8967667

    HTML5定义了FileReader作为文件API的重要成员用于读取文件,根据W3C的定义,FileReader接口提供了读取文件的方法和包含读取结果的事件模型. FileReader的使用方式非常简 ...

  3. (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)

    目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...

  4. System.Security.SecurityException The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception

    [15/08/19 00:03:10] [DataManager-7292-ERROR] System.Reflection.TargetInvocationException: Exception ...

  5. Python学习(基础简绍)

    今天终于开始了python的学习,至于python的历史我就不说了,百度百科中太详细了,我这里说就是关公面前耍大刀,太自不量力了,所以,废话不多说,直接讲讲我惊天学习Python的收获吧. 1.Pyt ...

  6. 炫酷CSS

    <!DOCTYPE html><!--To change this license header, choose License Headers in Project Propert ...

  7. css3小总结

    一.边框 1.border-radius:x,y,模糊半径,color(x为负数时左移动,y为负数是上移动) 2.box-radius:x,y,模糊半径,阴影半径,color 3.border-ima ...

  8. paip.语义分析--分词--常见的单音节字词 2_deDuli 单字词 774个

    paip.语义分析--分词--常见的单音节字词 2_deDuli  单字词 774个 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址 ...

  9. loop 循环和检测点 9.3

    loop 指令为循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址.对 IP 的修改范围都为:-128~127. 指令格式:loop 标号 操作: (cx)=(cx)- ...

  10. Android studio 分析内存泄漏

    以前用eclipse的时候,我们采用的是DDMS和MAT,不仅使用步骤复杂繁琐,而且要手动排查内存泄漏的位置,操作起来比较麻烦.后来随着Android studio的潮流,我也抛弃了eclipse加入 ...