本文初步介绍如何简单创建一个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

ASP.NET WEB API 初探的更多相关文章

  1. 初探ASP.NET Web API

    什么是ASP.NET Web API? 官方的解释是 ASP.NET Web API is a framework that makes it easy to build HTTP services ...

  2. 初探ASP.NET Web API (转)

    http://www.cnblogs.com/mejoy/p/6402821.html 什么是ASP.NET Web API? 官方的解释是 ASP.NET Web API is a framewor ...

  3. [转]ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

    本文转自:http://www.cnblogs.com/parry/p/ASPNET_MVC_Web_API_digest_authentication.html 在前一篇文章中,主要讨论了使用HTT ...

  4. ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

    在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看另一种验证的方式:digest authentication,即摘要认 ...

  5. ASP.NET Web API(二):安全验证之使用HTTP基本认证

    在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API. 我们在接触了Web API的后就立马发现了有安全验证的需求 ...

  6. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

  7. ASP.NET Web API Model-ActionBinding

    ASP.NET Web API Model-ActionBinding 前言 前面的几个篇幅把Model部分的知识点划分成一个个的模块来讲解,而在控制器执行过程中分为好多个过程,对于控制器执行过程(一 ...

  8. ASP.NET Web API Model-ParameterBinding

    ASP.NET Web API Model-ParameterBinding 前言 通过上个篇幅的学习了解Model绑定的基础知识,然而在ASP.NET Web API中Model绑定功能模块并不是被 ...

  9. ASP.NET Web API Model-ModelBinder

    ASP.NET Web API Model-ModelBinder 前言 本篇中会为大家介绍在ASP.NET Web API中ModelBinder的绑定原理以及涉及到的一些对象模型,还有简单的Mod ...

随机推荐

  1. UVA 439 Knight Moves

      // 题意:输入标准国际象棋棋盘上的两个格子,求马最少需要多少步从起点跳到终点 BFS求最短路: bfs并维护距离状态cnt, vis记录是否访问过 #include<cstdio> ...

  2. hadoop namenode又一次格式化以后hbase的hmaster进程启动后立即消失

    hadoop的 namenode又一次格式化以后.重新启动hbase.发现它的hmaster进程启动后立即消失,查看一大堆日志,最后在zookeeper的日志里发现例如以下问题 Unable to r ...

  3. mmc运输问题

    运输问题,有生产和需求平衡,不平衡, 实际模型,没有多大意义,只是变个符号而已. 下面的是平衡的,如果不平衡,约束变一下就可以了.

  4. mysql优化:连接数

    有时候我们会遇见"MySQL: ERROR 1040: Too many connections"的异常,一种原因是訪问量过高,MySQLserver抗不住,这个时候就要考虑添加从 ...

  5. ios开发——实用技术篇OC篇&iOS的主要框架

    iOS的主要框架         阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...

  6. 配置Log4j(非常具体)

    来自: http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记 ...

  7. Mysql分表教程

    一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法.目前我所知道的方法都是MYISAM的,INNODB如何做分表并且保留事务和外键,我还不是 ...

  8. #pragma_pack(n)_与___attribute(aligned(n))

    #pragma pack(n) 与 __attribute(aligned(n))   在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int.long.float等)的变量,也 ...

  9. 结合源码看nginx-1.4.0之nginx事件驱动机制详解

    目录 0. 摘要 1. nginx事件模块组织结构 2. nginx事件模块数据结构及类图 3. nginx事件模块运行机制 4. 练习:一个简单的事件驱动模块 5. 小结 6. 参考源码

  10. SRM 584 第一次玩TopCoder。。。只水题一道。。。

    第一次topcoder,以前老感觉没有资格去做tc,cf什么的,现在已经慢慢接触了. 感觉还可以,还是有让我们这些蒻菜安慰的水题. tc的确很好玩,用客户端比赛,还有各种规则,而且还是只编写一个类提交 ...