ASP.NET WEB API 初探
本文初步介绍如何简单创建一个ASP.NET Web Api 程序。
Web Api 顾名思义就是一个Api接口,客户端可调用此接口进行业务操作。此类应用与 ASP.NET web服务(即使用扩展名.asmx的web服务文件)有一定的相似之处,又有大不同,
ASP.NET Web Api 主要是基于ASP.NET MVC 框架。
废话少说,现在开始。
我用的开发工具是Visul studio 2015。
1. 创建ASP.NET Web Api 项目。
改项目名称为DRMWebAPI,可得如下项目结构。
至此,API项目创建完毕。下面,我们添加新的Controller。在Controllers文件夹下添加NewdealerController.cs文件,如下图:
添加完成之后,我想用post方法传送参数的方式来调用这个接口。所以,我添加了一个类库DRMModel,如下图。
类库中有一个主类 NewDealer,主类NewDealer 包含Dealer,Contact,RDaddress,HouseAddress,SendAddress五个类。
各个类代码如下:
Dealer.cs
public class Dealer
{
public string RecruiterID { get; set; }
public string Recruiter { get; set; }
public string NationalID { get; set; }
public string dealer_name { get; set; }
public string sex { get; set; }
public string BirthYear { get; set; }
public string BirthMonth { get; set; }
public string BirthDay { get; set; }
}
Contact.cs
public class Contact
{
public string nightphonezonecode { get; set; }
public string nightphone { get; set; }
public string dayphonezonecode { get; set; }
public string dayphone { get; set; }
public string dayphoneext { get; set; }
public string mobilephone { get; set; }
public string email { get; set; }
public string occupation { get; set; }
public string occupation_sel { get; set; }
public string RecommenderID { get; set; }
public string RecommenderNationalID { get; set; }
public string Recommender { get; set; }
public string EINVOICE { get; set; }
public string DONATEINVOICE { get; set; }
}
RDaddress.cs
public class RDaddress
{
public string OLDMAILNO1 { get; set; }
public string OLDADDRESS1 { get; set; }
}
HouseAddress.cs
public class HouseAddress
{
public string selzipcode { get; set; }
public string selprovince { get; set; }
public string selcity { get; set; }
public string seladdr { get; set; }
public string sellane { get; set; }
public string selalley { get; set; }
public string selno { get; set; }
public string selfl { get; set; }
public string selroom { get; set; }
public string selroomnum { get; set; }
public string selrecipient { get; set; }
}
SendAddress.cs
public class SendAddress
{
public string selzipcode1 { get; set; }
public string selprovince1 { get; set; }
public string selcity1 { get; set; }
public string seladdr1 { get; set; }
public string sellane1 { get; set; }
public string selalley1 { get; set; }
public string selno1 { get; set; }
public string selfl1 { get; set; }
public string selroom1 { get; set; }
public string selroomnum1 { get; set; }
public string selrecipient1 { get; set; }
}
构造完毕之后,在NewdealerController.cs文件添加如下代码:
using System.Web;
using System.Web.Mvc;
using System.Net.Http;
using System.Web.Http;
using System.Text; namespace DRMWebAPI.Controllers
{
public class NewdealerController : ApiController
{
//post public string Add([FromBody]DRMModel.NewDealer newDealer)
{
return newDealer.Dealer.dealer_name;
} }
}
在这里要说明一下,调用ASP.NET Web API 接口可传json格式的数据,API会自动把json数据转换为C#类型,前提是json格式要正确。
分析NewdealerController中的Add方法,可知,当我们传DRMModel.NewDealer json格式数据时,接口会返回newDealer.Dealer.dealer_name。
好了,那么怎么访问这个接口呢?
我们可以查看App_Start 下的 WebApiConfig.cs 文件。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http; namespace DRMWebAPI
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
此文件定义了API的访问路径,如上所示,访问NewdealerController中的Add方法的路径为 (域名地址/IP)/api/Newdealer/add。
下面,我们尝试调用这个接口,我在HomeController.cs文件中加入如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Net;
using System.Text;
using System.IO; namespace DRMWebAPI.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{ string postdata = "{\"Dealer\":{\"RecruiterID\":\"1\",\"Recruiter\":\"2\",\"NationalID\":\"2\",\"dealer_name\":\"啊哈哈哈\",\"sex\":\"1\",\"BirthYear\":\"1\",\"BirthMonth\":\"1\",\"BirthDay\":\"1\"},\"Contact\":{\"nightphonezonecode\":\"1\",\"nightphone\":\"1\",\"dayphonezonecode\":\"1\",\"dayphone\":\"1\",\"dayphoneext\":\"1\",\"mobilephone\":\"1\",\"email\":\"1\",\"occupation\":\"1\",\"occupation_sel\":\"1\",\"RecommenderID\":\"1\",\"RecommenderNationalID\":\"1\",\"Recommender\":\"1\",\"EINVOICE\":\"1\",\"DONATEINVOICE\":\"1\"},\"RDaddress\":{\"OLDMAILNO1\":\"1\",\"OLDADDRESS1\":\"1\"},\"HouseAddress\":{\"selzipcode\":\"1\",\"selprovince\":\"1\",\"selcity\":\"1\",\"seladdr\":\"1\",\"sellane\":\"1\",\"selalley\":\"1\",\"selno\":\"1\",\"selfl\":\"1\",\"selroom\":\"1\",\"selroomnum\":\"1\",\"selrecipient\":\"1\"},\"SendAddress\":{\"selzipcode1\":\"1\",\"selprovince1\":\"1\",\"selcity1\":\"1\",\"seladdr1\":\"1\",\"sellane1\":\"1\",\"selalley1\":\"1\",\"selno1\":\"1\",\"selfl1\":\"1\",\"selroom1\":\"1\",\"selroomnum1\":\"1\",\"selrecipient1\":\"1\"}}";
string pageHtml = "";
var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost:55706//api/Newdealer/add");
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "POST"; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{ streamWriter.Write(postdata);
streamWriter.Flush();
streamWriter.Close();
} var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
pageHtml = streamReader.ReadToEnd();
} ViewData["pram1"] = pageHtml; return View();
}
}
}
代码是模拟浏览器的Post提交数据,提交到http://localhost:55706//api/Newdealer/add 的地址里。
其中postdata是我自己定义的NewDealer 类的json格式数据。至于类与json数据如何转换,请自行百度。
然后,我在View文件夹添加Home文件夹,再添加Index.aspx文件。
添加代码:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <!DOCTYPE html> <html>
<head runat="server">
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<%= ViewData["pram1"] %>
</div>
</body>
</html>
根据以上,当我打开Home/Index时,页面应该会输出postdata这个json格式数据中的\"dealer_name\":\"啊哈哈哈\",即页面会输出: 啊哈哈哈
如下图:
Demo下载地址:http://files.cnblogs.com/files/JinvidLiang/DRMWebAPI.zip
X6]L4JM}(EO{@EHXEL@Y.png)
X6]L4JM}(EO{@EHXEL@Y.png)
ASP.NET WEB API 初探的更多相关文章
- 初探ASP.NET Web API
什么是ASP.NET Web API? 官方的解释是 ASP.NET Web API is a framework that makes it easy to build HTTP services ...
- 初探ASP.NET Web API (转)
http://www.cnblogs.com/mejoy/p/6402821.html 什么是ASP.NET Web API? 官方的解释是 ASP.NET Web API is a framewor ...
- [转]ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)
本文转自:http://www.cnblogs.com/parry/p/ASPNET_MVC_Web_API_digest_authentication.html 在前一篇文章中,主要讨论了使用HTT ...
- ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)
在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看另一种验证的方式:digest authentication,即摘要认 ...
- ASP.NET Web API(二):安全验证之使用HTTP基本认证
在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API. 我们在接触了Web API的后就立马发现了有安全验证的需求 ...
- 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用
由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...
- ASP.NET Web API Model-ActionBinding
ASP.NET Web API Model-ActionBinding 前言 前面的几个篇幅把Model部分的知识点划分成一个个的模块来讲解,而在控制器执行过程中分为好多个过程,对于控制器执行过程(一 ...
- ASP.NET Web API Model-ParameterBinding
ASP.NET Web API Model-ParameterBinding 前言 通过上个篇幅的学习了解Model绑定的基础知识,然而在ASP.NET Web API中Model绑定功能模块并不是被 ...
- ASP.NET Web API Model-ModelBinder
ASP.NET Web API Model-ModelBinder 前言 本篇中会为大家介绍在ASP.NET Web API中ModelBinder的绑定原理以及涉及到的一些对象模型,还有简单的Mod ...
随机推荐
- Wps的ppt里 让图片按顺序出现 就是点击一下 出现一张照片
基本操作能够用两种方法来实现: 方法一.每页幻灯片插入一张图片,幻灯片默认就是单击鼠标切换幻灯片的,所以不用再做其它设置. 方法二.在一页幻灯片中插入多张图片,全选图片(插入图片后,点击图片,Ctrl ...
- Codeforces Round #333 (Div. 2) C. The Two Routes flyod
C. The Two Routes Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/602/pro ...
- [Canvas] Make Canvas Responsive to Pixel Ratio
Canvas is great for high performance graphics rendering but by default the results look blocky on ph ...
- Swift学习笔记(一)搭配环境以及代码执行成功
1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.可以开发ios,mac相关的app哦!是苹果以后大力推广的语言哦! 2.Swift给你带来什么机会 ...
- ptrace x64 转
#include <sys/ptrace.h> #include <sys/types.h> #include <sys/wait.h> #include < ...
- Python拼接多张图片
写机器学习相关博文,经常会碰到很多公式,而Latex正式编辑公式的利器.目前国内常用的博客系统,好像只有博客园支持,所以当初选择落户博客园.我现在基本都是用Latex写博文,然后要发表到博客园上与大家 ...
- mysql --The MEMORY Storage Engine--官方文档
原文地址:http://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html The MEMORY storage engine (fo ...
- 《JavaScript学习指南》第2版 学习笔记1
1.<noscript> 标签 noscript 元素用来定义在脚本未被执行时的替代内容(文本). 注释:如果浏览器支持脚本,那么它不会显示出 noscript 元素中的文本.无法识别 & ...
- mysql颠覆实战笔记(六)--商品系统设计(三):商品属性设计之固定属性
今天我们来讲一下商品属性 我们知道,不同类别的商品属性是不同的. 我们先建一个表prod_class_attr:
- Emacs安装auto-complete
分别下载各个el文件 auto-complete-mode 主源码库 https://github.com/auto-complete/auto-complete 把zip文件下载后,复制auto-c ...