本节将介绍如何进行业务项目搭建。

本业务项目示例是简单的企业信息管理功能,业务项目采用Code First方式,搭建包括:

  1. 创建实体项目
  2. 创建实体数据表映射
  3. 创建业务处理项目
  4. 创建业务Web项目

搭建完项目效果:

1、创建实体项目-ShiQuan.Company.Entity

创建企业信息实体

示例中企业信息包括:编号、名称、负责人、联系人、联系电话、联系地址等

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ShiQuan.Company.Entity
{
/// <summary>
/// 企业信息
/// </summary>
public class CompanyInfoEntity:BasicCompanyEntity
{
/// <summary>
/// 编号
/// </summary>
[Display(Name = "编号"), MaxLength()]
public string Code { get; set; }
/// <summary>
/// 编号
/// </summary>
[Display(Name = "编号"), MaxLength()]
public string Name { get; set; }
/// <summary>
/// 负责人
/// </summary>
[Display(Name = "负责人"), MaxLength()]
public string Leader { get; set; }
/// <summary>
/// 联系人
/// </summary>
[Display(Name = "联系人"), MaxLength()]
public string Linkman { get; set; }
/// <summary>
/// 联系电话
/// </summary>
[Display(Name = "联系电话"), MaxLength()]
public string Phone { get; set; }
/// <summary>
/// 联系地址
/// </summary>
[Display(Name = "联系地址"), MaxLength()]
public string Address { get; set; }
/// <summary>
/// 备注说明
/// </summary>
[Display(Name = "备注说明"), MaxLength()]
public string Remark { get; set; }
}
}

2、创建实体数据表映射项目-ShiQuan.Company.Mapping

创建空数据库

创建项目

创建企业信息数据表映射

using ShiQuan.Company.Entity;
using System;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ShiQuan.Company.Mapping
{
/// <summary>
/// 实体数据映射
/// </summary>
public class CompanyInfoMap : EntityTypeConfiguration<CompanyInfoEntity>
{
public CompanyInfoMap()
{
#region 表、主键
//表
this.ToTable("CompanyInfo");
//主键
this.HasKey(t => t.Id);
#endregion #region 配置关系
#endregion
}
}
}

创建实体数据库上下文

选择空Code First 模型

namespace ShiQuan.Company.Mapping
{
using System;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Linq; public class CompanyDbContext : DbContext
{
//您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config)
//使用“CompanyDbContext”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的
//“ShiQuan.Company.Mapping.CompanyDbContext”数据库。
//
//如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“CompanyDbContext”
//连接字符串。
public CompanyDbContext()
: base("name=CompanyDbContext")
{
} //为您要在模型中包含的每种实体类型都添加 DbSet。有关配置和使用 Code First 模型
//的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=390109。 // public virtual DbSet<MyEntity> MyEntities { get; set; }
/// <summary>
/// 重写数据型号创建,添加企业信息数据表映射
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); modelBuilder.Configurations.Add(new CompanyInfoMap()); base.OnModelCreating(modelBuilder);
}
}
}

配置数据库连接

  <connectionStrings>
<add name="CompanyDbContext" connectionString="Server=127.0.0.1;Initial Catalog=VSD_CompanyDB;User ID=sa;Password=123456*a" providerName="System.Data.SqlClient" />
</connectionStrings>

配置数据库上下文允许进行更新升级

using System;
using System.Collections.Generic;
using System.Data.Entity.Migrations;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ShiQuan.Company.Mapping.Migrations
{
internal sealed class Configuration : DbMigrationsConfiguration<CompanyDbContext>
{
public Configuration()
{
//配置允许数据库更新升级
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
} protected override void Seed(CompanyDbContext dbContext)
{ }
}
}

使用update-database 对数据库进行升级更新

3、创建企业信息管理业务处理项目-ShiQuan.Company.Business

创建企业信息库业务处理基础类,实现实体查询、删除和保存功能。

using Learun.DataBase.Repository;
using Learun.Util;
using ShiQuan.Company.Entity;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks; namespace ShiQuan.Company.Business
{
/// <summary>
/// 企业信息管理库业务处理基础类
/// </summary>
/// <typeparam name="T"></typeparam>
public class BasicCompanyBLL<T> : RepositoryFactory<T> where T : class,new()
{
protected string dbConn = ""; /// <summary>
/// 构造函数
/// </summary>
public BasicCompanyBLL()
{
//this.dbConn = ConfigurationManager.ConnectionStrings["CompanyDbContext"].ConnectionString;
this.dbConn = "CompanyDbContext";
}
#region 获取数据
/// <summary>
/// 获取列表
/// </summary>
/// <param name="pagination">分页</param>
/// <param name="queryJson">查询参数</param>
/// <returns>返回分页列表</returns>
public virtual IEnumerable<T> GetPageList(Pagination pagination, string queryJson)
{
var expression = LinqExtensions.True<T>();
expression = QueryStringToExpression(expression, queryJson);
return this.BaseRepository(dbConn).FindList(expression, pagination);
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="pagination">分页</param>
/// <param name="queryJson">查询参数</param>
/// <returns>返回分页列表</returns>
public virtual IEnumerable<T> GetPageList(Pagination pagination, Expression<Func<T, bool>> linq)
{
return this.BaseRepository(dbConn).FindList(linq, pagination);
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="queryJson">查询参数</param>
/// <returns>返回列表</returns>
public virtual IEnumerable<T> GetList(string queryJson)
{
var expression = LinqExtensions.True<T>();
expression = QueryStringToExpression(expression, queryJson);
return this.BaseRepository(dbConn).IQueryable(expression);
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="queryJson">查询参数</param>
/// <returns>返回列表</returns>
public virtual IQueryable<T> GetList(Expression<Func<T, bool>> linq)
{
return this.BaseRepository(dbConn).IQueryable(linq);
}
/// <summary>
/// 获取实体
/// </summary>
/// <param name="keyValue">主键值</param>
/// <returns></returns>
public virtual T GetEntity(string keyValue)
{
return this.BaseRepository(dbConn).FindEntity(keyValue);
} /// <summary>
/// 根据条件获取实体
/// </summary>
/// <param name="linq">Linq条件</param>
/// <returns></returns>
public virtual T FindEntity(Expression<Func<T, bool>> linq)
{
return this.BaseRepository(dbConn).FindEntity(linq);
}
/// <summary>
/// 获取数据
/// </summary>
/// <param name="queryJson"></param>
/// <returns></returns>
public virtual DataTable GetTable(string queryJson)
{
string sql = GetSQL(queryJson);
return this.BaseRepository(dbConn).FindTable(sql);
}
/// <summary>
/// 获取数据
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public virtual DataTable GetTableBySql(string sql)
{
//string sql = GetSQL(queryJson);
return this.BaseRepository(dbConn).FindTable(sql);
}
/// <summary>
/// 获取分页列表,返回Datatable
/// </summary>
/// <param name="queryJson">查询参数</param>
/// <returns>返回列表</returns>
public virtual DataTable GetPageTable(Pagination pagination, string queryJson)
{
string sql = GetSQL(queryJson);
return this.BaseRepository(dbConn).FindTable(sql, pagination);
}
/// <summary>
/// 获取分页列表,返回Datatable
/// </summary>
/// <param name="sql">查询参数</param>
/// <returns>返回列表</returns>
public virtual DataTable GetPageTableBySql(Pagination pagination, string sql)
{
//string sql = GetSQL(queryJson);
return this.BaseRepository(dbConn).FindTable(sql, pagination);
}
#endregion #region 提交数据
/// <summary>
/// 删除数据
/// </summary>
/// <param name="keyValue">主键</param>
public virtual void RemoveForm(string keyValue)
{
string[] dels = keyValue.Split(',');
if (dels.Length > )
{
IRepository db = new RepositoryFactory().BaseRepository(dbConn).BeginTrans();
try
{
foreach (var item in dels)
{
db.Delete(item);
}
db.Commit();
}
catch (Exception)
{
db.Rollback();
throw;
}
}
else
{
this.BaseRepository(dbConn).Delete(keyValue);
}
}
/// <summary>
/// 保存表单(新增、修改)
/// </summary>
/// <param name="keyValue">主键值</param>
/// <param name="entity">实体对象</param>
/// <returns></returns>
public virtual void SaveForm(string keyValue, T entity)
{
if (!string.IsNullOrEmpty(keyValue))
{
this.BaseRepository(dbConn).Update(entity);
}
else
{
this.BaseRepository(dbConn).Insert(entity);
}
}
#endregion #region 帮助函数
/// <summary>
/// 生成查询表达式
/// </summary>
/// <param name="queryJson">查询对象</param>
/// <returns></returns>
protected virtual Expression<Func<T, bool>> QueryStringToExpression(Expression<Func<T, bool>> expression, string queryJson)
{
if (string.IsNullOrEmpty(queryJson))
return expression;
var queryParam = queryJson.ToJObject();
if (!queryParam["condition"].IsEmpty() && !queryParam["keyword"].IsEmpty())
{
string condition = queryParam["condition"].ToString();
string keyword = queryParam["keyword"].ToString();
switch (condition)
{
default: break;
}
}
return expression;
}
/// <summary>
/// 根据实体生成SQL
/// </summary>
/// <param name="queryJson">查询对象</param>
/// <returns></returns>
protected virtual string GetSQL(string queryJson)
{
StringBuilder sb = new StringBuilder();
var queryParam = queryJson.ToJObject();
if (!queryParam["condition"].IsEmpty() && !queryParam["keyword"].IsEmpty())
{
string condition = queryParam["condition"].ToString();
string keyword = queryParam["keyword"].ToString();
sb.Append(" AND " + condition + " like '%" + keyword + "%'");
}
return sb.ToString();
}
#endregion
}
}

创建企业信息业务处理类,继承基础业务处理类,重写保存、过滤条件方法。

using ShiQuan.Company.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Linq.Expressions;
using Learun.Util;
using Learun.Util.Operat; namespace ShiQuan.Company.Business
{
/// <summary>
/// 实现企业信息管理业务处理,继承企业信息库基础业务处理
/// </summary>
public class CompanyInfoBLL : BasicCompanyBLL<CompanyInfoEntity>
{
/// <summary>
/// 数据保存
/// </summary>
/// <param name="keyValue"></param>
/// <param name="entity"></param>
public override void SaveForm(string keyValue, CompanyInfoEntity entity)
{
try
{
if (string.IsNullOrEmpty(keyValue))
{
entity.Id = Guid.NewGuid().ToString();
}
else
entity.Id = keyValue; base.SaveForm(keyValue, entity);
}
catch (Exception ex)
{ throw;
}
}
/// <summary>
/// 重写查询过滤条件
/// </summary>
/// <param name="expression"></param>
/// <param name="queryJson"></param>
/// <returns></returns>
protected override Expression<Func<CompanyInfoEntity, bool>> QueryStringToExpression(Expression<Func<CompanyInfoEntity, bool>> expression, string queryJson)
{
if (string.IsNullOrEmpty(queryJson))
return expression;
var queryParam = queryJson.ToJObject();
if (queryParam["Code"].IsEmpty() == false)
{
string keyword = queryParam["Code"].ToString();
expression = expression.And(my => my.Code == keyword);
}
if (!queryParam["condition"].IsEmpty() && !queryParam["keyword"].IsEmpty())
{
string condition = queryParam["condition"].ToString();
string keyword = queryParam["keyword"].ToString();
switch (condition)
{
default: break;
}
}
return expression;
}
}
}

4、创建企业信息管理Web项目-ShiQuan.Company.Web

创建空的企业信息管理控制器,实现列表、编辑视图,数据查询、删除、保存方法。

using Learun.Application.Web;
using Learun.Util;
using ShiQuan.Company.Business;
using ShiQuan.Company.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace ShiQuan.Company.Web.Areas.CompanyManage.Controllers
{
/// <summary>
/// 企业信息管理
/// </summary>
public class CompanyInfoController : MvcControllerBase
{
// GET: CompanyManage/CompanyInfo
CompanyInfoBLL service = new CompanyInfoBLL();
/// <summary>
/// 列表视图
/// </summary>
/// <returns></returns>
public ActionResult CompanyInfoIndex()
{
return View();
}
/// <summary>
/// 编辑视图
/// </summary>
/// <returns></returns>
public ActionResult CompanyInfoForm()
{
return View();
} #region 获取数据
/// <summary>
/// 获取列表
/// </summary>
/// <param name="pagination">分页参数</param>
/// <param name="queryJson">查询参数</param>
/// <returns>返回分页列表Json</returns>
[HttpGet]
public ActionResult GetPageListJson(string pagination, string queryJson)
{
Pagination paginationobj = pagination.ToObject<Pagination>();
var watch = CommonHelper.TimerStart();
var data = service.GetPageList(paginationobj, queryJson);
var jsonData = new
{
rows = data,
total = paginationobj.total,
page = paginationobj.page,
records = paginationobj.records,
costtime = CommonHelper.TimerEnd(watch)
};
//return ToJsonResult(jsonData);
return Success(jsonData);
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="queryJson">查询参数</param>
/// <returns>返回列表Json</returns>
[HttpGet]
public ActionResult GetListJson(string queryJson)
{
var data = service.GetList(queryJson);
return ToJsonResult(data);
}
/// <summary>
/// 获取实体
/// </summary>
/// <param name="keyValue">主键值</param>
/// <returns>返回对象Json</returns>
[HttpGet]
public ActionResult GetFormJson(string keyValue)
{
var data = service.GetEntity(keyValue);
return ToJsonResult(data);
}
#endregion #region 提交数据
/// <summary>
/// 删除数据
/// </summary>
/// <param name="keyValue">主键值</param>
/// <returns></returns>
[HttpPost]
[ValidateAntiForgeryToken]
[AjaxOnly]
public ActionResult RemoveForm(string keyValue)
{
service.RemoveForm(keyValue);
return Success("删除成功。");
}
/// <summary>
/// 保存表单(新增、修改)
/// </summary>
/// <param name="keyValue">主键值</param>
/// <param name="entity">实体对象</param>
/// <returns></returns>
[HttpPost]
[ValidateAntiForgeryToken]
[AjaxOnly]
public ActionResult SaveForm(string keyValue, CompanyInfoEntity entity)
{
service.SaveForm(keyValue, entity);
return Success("操作成功。", entity);
}
#endregion
}
}

创建列表界面

@{
ViewBag.Title = "客户管理";
Layout = "~/Views/Shared/_Index.cshtml";
}
<div class="lr-layout">
<div class="lr-layout-center">
<div class="lr-layout-wrap lr-layout-wrap-notitle">
<div class="lr-layout-tool">
<div class="lr-layout-tool-left">
<div class="lr-layout-tool-item">
<input id="txt_Keyword" type="text" class="form-control" placeholder="请输查询关键字" />
</div>
<div class="lr-layout-tool-item">
<a id="btn_Search" class="btn btn-primary btn-sm"><i class="fa fa-search"></i>&nbsp;<span class="lrlg">查询</span></a>
</div>
</div>
<div class="lr-layout-tool-right">
<div class="btn-group btn-group-sm">
<a id="btnReload" class="btn btn-default"><i class="fa fa-refresh"></i></a>
</div>
<div class="btn-group btn-group-sm" learun-authorize="yes">
<a id="btnAdd" class="btn btn-default"><i class="fa fa-plus"></i>&nbsp;<span class="lrlg">新增</span></a>
<a id="btnEdit" class="btn btn-default"><i class="fa fa-pencil-square-o"></i>&nbsp;<span class="lrlg">编辑</span></a>
<a id="btnDelete" class="btn btn-default"><i class="fa fa-trash-o"></i>&nbsp;<span class="lrlg">删除</span></a>
</div>
</div>
</div>
<div class="lr-layout-body" id="gridtable"></div>
</div>
</div>
</div>
<script type="text/javascript">
var refreshGirdData; // 更新数据
var selectedRow;
var bootstrap = function ($, learun) {
"use strict";
var page = {
init: function () {
page.initGrid();
page.bind();
},
bind: function () {
// 查询
$('#btn_Search').on('click', function () {
var keyword = $('#txt_Keyword').val();
page.search({ keyword: keyword });
});
// 刷新
$('#btnReload').on('click', function () {
location.reload();
});
// 新增
$('#btnAdd').on('click', function () {
selectedRow = null;//新增前请清空已选中行
learun.layerForm({
id: 'form',
title: '新增客户',
url: top.$.rootUrl + '/CompanyManage/CompanyInfo/CompanyInfoForm',
width: ,
height: ,
maxmin: true,
callBack: function (id) {
return top[id].acceptClick(refreshGirdData);
}
});
});
// 编辑
$('#btnEdit').on('click', function () {
selectedRow = $('#gridtable').jfGridGet('rowdata');
var keyValue = $('#gridtable').jfGridValue('Id');
if (learun.checkrow(keyValue)) {
learun.layerForm({
id: 'form',
title: '编辑客户',
url: top.$.rootUrl + '/CompanyManage/CompanyInfo/CompanyInfoForm',
width: ,
height: ,
maxmin: true,
callBack: function (id) {
return top[id].acceptClick(refreshGirdData);
}
});
}
});
// 删除
$('#btnDelete').on('click', function () {
var keyValue = $('#gridtable').jfGridValue('Id');
if (learun.checkrow(keyValue)) {
learun.layerConfirm('是否确认删除该项!', function (res) {
if (res) {
learun.deleteForm(top.$.rootUrl + '/CompanyManage/CompanyInfo/DeleteForm', { keyValue: keyValue }, function () {
refreshGirdData();
});
}
});
}
});
},
initGrid: function () {
$('#gridtable').jfGrid({
url: top.$.rootUrl + '/CompanyManage/CompanyInfo/GetPageListJson',
headData: [
{ label: '编号', name: 'Code', width: , align: 'left' },
{ label: '名称', name: 'Name', width: , align: 'left' },
{ label: '负责人', name: 'Leader', width: , align: 'left' },
{ label: '联系人', name: 'Linkman', width: , align: 'left' },
{ label: '联系电话', name: 'Phone', width: , align: 'left' },
{ label: '联系地址', name: 'Address', width: , align: 'left' },
{
label: "最后更新", name: "ModifyDate", width: , align: "left",
formatter: function (cellvalue) {
return learun.formatDate(cellvalue, 'yyyy-MM-dd hh:mm');
}
},
{ label: '备注', name: 'Remark', width: , align: 'left' },
],
mainId: 'Id',
reloadSelected: true,
isPage: true,
sidx: 'Code'
});
page.search();
},
search: function (param) {
$('#gridtable').jfGridSet('reload', param);
}
};
// 保存数据后回调刷新
refreshGirdData = function () {
page.search();
}
page.init();
}
</script>

创建编辑界面

@{
ViewBag.Title = "客户添加";
Layout = "~/Views/Shared/_Form.cshtml";
}
<div class="lr-form-wrap" id="form">
<div class="col-xs-12 lr-form-item">
<div class="lr-form-item-title">编号<font face="宋体">*</font></div>
<input id="Code" type="text" class="form-control" isvalid="yes" checkexpession="NotNull" />
</div>
<div class="col-xs-12 lr-form-item">
<div class="lr-form-item-title">名称<font face="宋体">*</font></div>
<input id="Name" type="text" class="form-control" isvalid="yes" checkexpession="NotNull" />
</div>
<div class="col-xs-12 lr-form-item">
<div class="lr-form-item-title">负责人<font face="宋体">*</font></div>
<input id="Leader" type="text" class="form-control" isvalid="yes" checkexpession="NotNull" />
</div>
<div class="col-xs-12 lr-form-item">
<div class="lr-form-item-title">联系人</div>
<input id="Linkman" type="text" class="form-control" isvalid="no" checkexpession="NotNull" />
</div>
<div class="col-xs-12 lr-form-item">
<div class="lr-form-item-title">联系电话</div>
<input id="Phone" type="text" class="form-control" />
</div>
<div class="col-xs-12 lr-form-item">
<div class="lr-form-item-title">联系地址</div>
<input id="Address" type="text" class="form-control" />
</div>
<div class="col-xs-12 lr-form-item">
<div class="lr-form-item-title">备注</div>
<textarea id="Remark" class="form-control" style="height: 50px;"></textarea>
</div>
</div>
<script type="text/javascript">
var acceptClick;
var keyValue = '';
var bootstrap = function ($, learun) {
"use strict";
var selectedRow = learun.frameTab.currentIframe().selectedRow;
var page = {
init: function () {
page.bind();
page.initData();
},
bind: function () {
// 客户级别
//$('#F_CustLevelId').lrDataItemSelect({ code: 'Client_Level', maxHeight: 230 });
//// 客户类别
//$('#F_CustTypeId').lrDataItemSelect({ code: 'Client_Sort', maxHeight: 230 });
//// 客户程度
//$('#F_CustDegreeId').lrDataItemSelect({ code: 'Client_Degree', maxHeight: 230 });
////跟进人员
//$('#F_TraceUserId').lrformselect({
// layerUrl: top.$.rootUrl + '/LR_OrganizationModule/User/SelectForm',
// layerUrlW: 800,
// layerUrlH: 520,
// dataUrl: top.$.rootUrl + '/LR_OrganizationModule/User/GetListByUserIds'
//});
////公司行业
//$('#F_CustIndustryId').lrDataItemSelect({ code: 'Client_Trade', maxHeight: 230 });
},
initData: function () {
if (!!selectedRow) {
keyValue = selectedRow.Id;
$('#form').lrSetFormData(selectedRow);
}
}
};
// 保存数据
acceptClick = function (callBack) {
if (!$('#form').lrValidform()) {
return false;
}
var postData = $('#form').lrGetFormData(keyValue);
$.lrSaveForm(top.$.rootUrl + '/CompanyManage/CompanyInfo/SaveForm?keyValue=' + keyValue
, postData
, function (res) {
// 保存成功后才回调
if (!!callBack) {
callBack();
}
});
};
page.init();
}
</script>

业务项目,至此搭建完成,接下来,使用Web项目进行引用,

配置业务项目数据表映射

  <!-- 实体类映射库名称 -->
<add key="DataMapper" value="Learun.Application.Mapping.dll,ShiQuan.Company.Mapping.dll"/>

配置业务项目数据库连接,添加配置功能菜单

运行系统效果

更多精彩,且听下回分解!

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建的更多相关文章

  1. http服务 WCF、Web API、Web service、WCF REST之间的区别

      http服务 WCF.Web API.Web service.WCF REST之间的区别 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web ...

  2. .net mvc web api Autofac依赖注入框架-戈多编程

    今天自己搭了一套基于三层的依赖注入mvc web api 的依赖注入框架,在此总结下相关配置 1.设置应用程序的.net Framework版本为 4.5 2.通过Nuget 安装autofac包 I ...

  3. NET Web API和Web API Client Gen使Angular 2应用程序

    使用ASP.NET Web API和Web API Client Gen使Angular 2应用程序的开发更加高效 本文介绍“ 为ASP.NET Web API生成TypeScript客户端API ” ...

  4. Web API和Web Service

    首先,Web API是由Web Service演变而来,它们两者关系就是所有Web Service都是API,但并非所有API都是Web Service.其次,两者都有利于信息的传输,但Web API ...

  5. Web APi之Web Host消息处理管道(六)

    前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和响应抽象成HttpRespon ...

  6. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

  7. ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?

      ASP.NET MVC 的路由实际上是建立在 ASP.NET 的路由系统之上的. MVC 路由注册通常是这样的: RouteTable 是一个全局路由表, 它的 Routes 静态属性是一个 Ro ...

  8. 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(1)-Web前端页面

    本 Web 系统框架基于C# EF6+MVC+WebApi的快速应用开发平台.本节主要介绍Web前端页面设计与实现.Web前端页面主要分为普通列表页面.树状导航列表页面.普通编辑页面.数据导入页面.向 ...

  9. ASP.NET Web API——选择Web API还是WCF

    WCF是.NET平台服务开发的一站式框架,那么为什么还要有ASP.NET Web API呢?简单来说,ASP.NET Web API的设计和构建只考虑了一件事情,那就是HTTP,而WCF的设计主要是考 ...

随机推荐

  1. MySql(Linux)

    百度云:链接:http://pan.baidu.com/s/1jHQtPau    密码:elr8 官方下载网址:http://dev.mysql.com/downloads/mysql/

  2. PHP-- B/S结构

    B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件.这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简 ...

  3. 牛客第三场 J LRU management

    起初看到这道题的时候,草草就放过去了,开了另一道题,结果开题不顺利,总是感觉差一点就可以做出来,以至于一直到最后都没能看这道题qaq 题意:类似于操作系统上讲的LRU算法,有两个操作,0操作代表访问其 ...

  4. TestNG中DataProvider的用法二:简单的数据驱动

    @DataProvider标记的方法除了可以返回数组外,还可以返回一个Iterator,这样的好处是不用把所有的测试数据都加载到内存中,而是需要的时候就读一条. 下面的例子就使用了Iterator,然 ...

  5. 10个常用的linux的命令

    以下就是今天我们要介绍的Linux命令:  man  touch, cat and less  sort and grep  cut  sed  tar  find  diff  uniq  chmo ...

  6. OOM和JVM配置优化

    OOM这个缩写就是Java程序开发过程中让人最头痛的问题:Out of Memory.在很多开发人员的开发过程中,或多或少的都会遇到这类问题,这类问题定位比较困难,往往需要根据经验来判断可能出现问题的 ...

  7. Gunicorn-Django部署

    1. 简单部署 1. sudo pip3 install gunicorn 2. cd 到django项目中 sudo python3 manage.py migrate 3.启动服务:sudo py ...

  8. Echarts图表插件(4.x版本)使用(二、带分类筛选的多个图表/实例化多个ECharts,以关系图/force为例)

    导读 如果想在一个页面里实例化带分类筛选的多个Echarts该怎么做呢? 曾探讨了带分类选择的关系图显示为自定义图片的需求实现,传送门ECharts图表插件(4.x版本)使用(一.关系图force节点 ...

  9. 记一次织梦cms渗透测试

    记一次织梦cms渗透测试 0x01 前言 本次测试的整个流程:枚举用户名-针对性暴破-登录后台-后台编辑php文件getshell. 0x02 过程 1.登录功能模块存在用户名枚举缺陷,利用此权限先枚 ...

  10. 初试kafka消息队列中间件二(采用java代码收发消息)

    初试kafka消息队列中间件二(采用java代码收发消息) 上一篇 初试kafka消息队列中间件一 今天的案例主要是将采用命令行收发信息改成使用java代码实现,根据上一篇的接着写: 先启动Zooke ...