基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建
本节将介绍如何进行业务项目搭建。
本业务项目示例是简单的企业信息管理功能,业务项目采用Code First方式,搭建包括:
- 创建实体项目
- 创建实体数据表映射
- 创建业务处理项目
- 创建业务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> <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> <span class="lrlg">新增</span></a>
<a id="btnEdit" class="btn btn-default"><i class="fa fa-pencil-square-o"></i> <span class="lrlg">编辑</span></a>
<a id="btnDelete" class="btn btn-default"><i class="fa fa-trash-o"></i> <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)-业务项目搭建的更多相关文章
- http服务 WCF、Web API、Web service、WCF REST之间的区别
http服务 WCF.Web API.Web service.WCF REST之间的区别 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web ...
- .net mvc web api Autofac依赖注入框架-戈多编程
今天自己搭了一套基于三层的依赖注入mvc web api 的依赖注入框架,在此总结下相关配置 1.设置应用程序的.net Framework版本为 4.5 2.通过Nuget 安装autofac包 I ...
- 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 ” ...
- Web API和Web Service
首先,Web API是由Web Service演变而来,它们两者关系就是所有Web Service都是API,但并非所有API都是Web Service.其次,两者都有利于信息的传输,但Web API ...
- Web APi之Web Host消息处理管道(六)
前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和响应抽象成HttpRespon ...
- 返璞归真 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 上传文件, ...
- ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?
ASP.NET MVC 的路由实际上是建立在 ASP.NET 的路由系统之上的. MVC 路由注册通常是这样的: RouteTable 是一个全局路由表, 它的 Routes 静态属性是一个 Ro ...
- 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(1)-Web前端页面
本 Web 系统框架基于C# EF6+MVC+WebApi的快速应用开发平台.本节主要介绍Web前端页面设计与实现.Web前端页面主要分为普通列表页面.树状导航列表页面.普通编辑页面.数据导入页面.向 ...
- ASP.NET Web API——选择Web API还是WCF
WCF是.NET平台服务开发的一站式框架,那么为什么还要有ASP.NET Web API呢?简单来说,ASP.NET Web API的设计和构建只考虑了一件事情,那就是HTTP,而WCF的设计主要是考 ...
随机推荐
- cookbook_元编程
1给函数添加一个包装 问题:给函数加一个外包装层,已添加额外的处理,例如,记录日志,计时统计等 解决方案:可以定义一个装饰器来包装函数 2编写装饰器时如何保存函数的元数据 问题:当一个函数被装饰器装饰 ...
- Java 性能优化(一)
Java 性能调优(一) 1.衡量程序性能的标准 (1) 程序响应速度: (2) 内存占有情况: 2.程序调优措施 (1) 设计调优 设计调优处于所有调优手段 的上层,需要在软件开发之前进行.在软件开 ...
- 使用用树莓派打造远程WEB服务器
简介:系统配置Raspberry Pi 3B + Raspbian + MySQL5.7 + Tomcat 9 + Nginx + 公网IP. 工具:Win32DiskImager .FileZill ...
- Oracle_InstantClient 及PL/SQL Developer工具的安装
一.下载 InstantClient 地址: http://www.oracle.com/technology/software/tech/oci/instantclient/index.html i ...
- Java - 自动配置log4j的日志文件路径
目录 1 日志路径带来的痛点 2 log4j.properties文件的配置 3 彻底解决痛点 3.1 单独的Java程序包 (非Java Web项目) 3.2 Web项目 4 附录 - 获取当前项目 ...
- weblogic 内存溢出解决 java.lang.OutOfMemoryError: PermGen space
解决办法: 1.在idea中,运行时给weblogic server中 VM options 配置增加内存的参数:-server -XX:PermSize=1024m -XX:MaxPermSize= ...
- 【Java例题】2.5 温度转换
5.输入华氏温度, 用下列公式将其转换为摄氏温度并输出. C=5/9(F-32). package study; import java.util.Scanner; public class demo ...
- react解析: render的FiberRoot(三)
react解析: render的FiberRoot(三) 感谢 yck: 剖析 React 源码解析,本篇文章是在读完他的文章的基础上,将他的文章进行拆解和加工,加入我自己的一下理解和例子,便于大家理 ...
- XML学习(一)
本文主要记录xml学习过程中的一些笔记,包括xml作用,语法以及解析. 1.HTML和XML的区别 1.1.HTML 名称: HyperText Markup Languae(超文本标记语言) ...
- pythonday06数据类型(四)
今日内容 1.集合 2内存相关 1.集合set 无序 无重复 v = {1,2,3,4,5,6,99,100} # 疑问:v = {} """ None int v1 = ...