WebApihtml
1.建立實體類web
public class Contact
{
public string Id { get; set; }
public string Name { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public DateTime LastModified { get; set; }
}ajax
2.操做實體類接口數據庫
public interface IContactRepository
{
IEnumerable<Contact> GetAllContacts();//獲取所有數據
Contact GetContact(string id);//根據id獲取數據
List<Contact> AddContact(Contact item);//添加數據
bool RemoveContact(string id);//刪除數據
List<Contact> UpdateContact(Contact item); //更新數據
}json
3.建立BLL並實現IContactRepository接口api
public class ContactBLL : IContactRepository
{
public IEnumerable<Contact> GetAllContacts()
{
return ContactDAL.GetAllContactsDAL();
}跨域
public Models.Contact GetContact(string id)
{
return ContactDAL.GetContactDAL(id);
}服務器
public List<Contact> AddContact(Contact item)
{
return ContactDAL.AddContactDAL(item);
}async
public bool RemoveContact(string id)
{
return ContactDAL.RemoveContactDAL(id);
}ide
public List<Contact> UpdateContact(Contact item)
{
return ContactDAL.UpdateContactDAL(item.Id,item);
}
}
4.建立DAL操做數據,由於沒有寫數據庫,因此寫了一個集合模擬數據庫
public class ContactDAL
{
static List<Contact> list = new List<Contact>() {
new Contact(){Id = "1",Name = "小李",Phone = "13800000",Email = "222@qq.com",LastModified = DateTime.Now},
new Contact(){Id = "2",Name = "小王",Phone = "13500000",Email = "333@qq.com",LastModified = DateTime.Now}
};
public static IEnumerable<Contact> GetAllContactsDAL()
{
var a = list.Where(u => 1 == 1);
return a;
}
public static Contact GetContactDAL(string id)
{
var contact = list.Where(u => u.Id == id).FirstOrDefault<Contact>();//使用lamdba
return contact;
}
public static List<Contact> AddContactDAL(Contact item)
{
list.Add(item);
return list;
}
public static bool RemoveContactDAL(string id)
{
var a = from u in list where u.Id == id select u;//使用linq
bool b = list.Remove(a.FirstOrDefault<Contact>());
return b;
}
public static List<Contact> UpdateContactDAL(string id,Contact item)
{
//var a = list.Where(u => u.Id == id).FirstOrDefault<Contact>();
var a = from u in list where u.Id == id select u;
Contact contact = a.FirstOrDefault<Contact>();
contact.Name = item.Name;
return list;
}
}
5.建立api能夠讀寫的控制器
[AllowCross]//webapi容許跨域訪問
[RoutePrefix("api/contact")]//配置路由
public class ContactController : ApiController
{
private static readonly IContactRepository _contacts = new ContactBLL();
[HttpGet]
public string GetContact()
{
return JsonConvert.SerializeObject(_contacts.GetAllContacts());
}
[HttpGet]
public Contact GetContact(string id)
{
return _contacts.GetContact(id);
}
[HttpPost]
public List<Contact> AddContact([FromBody]Contact value)
{
return _contacts.AddContact(value);
}
[HttpPost]
public List<Contact> UpdateContact([FromBody]Contact value)
{
return _contacts.UpdateContact(value);
}
[HttpGet]
public bool RemoveContact(string id)
{
return _contacts.RemoveContact(id);
}
}
6.路由配置(App_Start中的RouteConfig.cs)
修改:url: "{controller}/{action}/{id}",
7.配置跨域訪問(App_Start中的WebApiConfig.cs)
添加改類
public class AllowCrossAttribute : System.Web.Http.Filters.ActionFilterAttribute
{
private const string Origin = "Origin";
/// <summary>
/// Access-Control-Allow-Origin是HTML5中定義的一種服務器端返回Response header,用來解決資源(好比字體)的跨域權限問題。
/// </summary>
private const string AccessControlAllowOrigin = "Access-Control-Allow-Origin";
/// <summary>
/// originHeaderdefault的值能夠使 URL 或 *,若是是 URL 則只會容許來自該 URL 的請求,* 則容許任何域的請求
/// </summary>
private const string originHeaderdefault = "*";
/// <summary>
/// 該方法容許api支持跨域調用
/// </summary>
/// <param name="actionExecutedContext"> 初始化 System.Web.Http.Filters.HttpActionExecutedContext 類的新實例。</param>
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
actionExecutedContext.Response.Headers.Add(AccessControlAllowOrigin, originHeaderdefault);
}
}
Web端調用
@{
ViewBag.Title = "請求web api";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>請求web api</h2>
<div>
<input type="button" value="獲取所有數據" onclick="GetContactAll()"/>
<input type="button" value="根據id獲取數據" onclick="GetContactToId()" />
<input type="button" value="添加數據" onclick="AddContact()" />
<input type="button" value="更新數據" onclick="UpdateContact()" />
<input type="button" value="刪除數據" onclick="RemoveContact()" />
</div>
<script>
var path = "http://localhost:32166/api/Contact/";
function GetContactAll() {
$.get(path + "GetContact", "", function (data) {
console.info(data);
},"json")
}
function GetContactToId() {
$.get(path + "GetContact", {id:"1"}, function (data) {
console.info(data);
},"json")
}
function AddContact() {
var contact1 ={
Id:"3",
Name: "小樓",
Phone: "123456",
Email: "123@qq.com"
}
var contact2 = {
Id: "4",
Name: "小樓",
Phone: "123456",
Email: "123@qq.com"
}
//兩種方式
$.post(path + "AddContact", contact1, function (data) {
console.info(data);
}, "json");//第一種
$.ajax({
type: "post",
url: path + "AddContact",
dataType: "json",
data: contact2,
async: true,
success: function (data) {
console.info(data);
}
})//第二種
}
function UpdateContact() {
var contact= {
Id:"1",
Name: "小樓",
Phone: "123456",
Email: "123@qq.com"
}
$.post(path + "UpdateContact", contact, function (data) {
console.info(data);
},'json')
}
function RemoveContact() {
$.get(path + "RemoveContact", { id: "1" }, function (data) {
console.info(data);
},'json');
}
</script>