web api入门及部分问题(搭建)

整个暑假一直在做一个数据统计类型的网站,我负责写基于Web Api框架的后台代码。

ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务。 ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台。

直接进入正题:

S1. 首先创建一个asp.net web应用程序(我本机用的是vs 2015)

QQ截图20160416155825

根据自己的需要选择路径,点击确定

S2. 接下来选择空模板,核心引用选择Web API,点击确定,一个空模板就建成了

QQ截图20160416160009

到这一步,代码框架基本上已经搭建好,下面是一些简单应用。

QQ截图20160416160125

可以看到上图,默认的目录结构跟MVC差不多,只是少了View,因为View在这里是没又什么作用的。空模板建成,之后就需要添加我们需要的代码了。

主要的代码需要再Models以及Controllers中添加!Modles主要定义数据,Controllers则是方法的集合。另外除此之外,还有需要注意的地方就是App_Start文件夹下有一个名字叫做WebApiConfig.cs的文件,里面有一个系统已经默认的路由设置,我们可以直接用这个路由设置,也可以自己写路由,具体会在后面的地方说到!

》》创建实体类

在Models文件夹下添加类,名称为LogInfo.cs,前面提到过,Models是定义数据的,所以添加代码如下:(当然,数据的定义也可以不在Models下,可以直接写在Controllers方法中,但是这样写的话最直观的会增加代码量,降低效率,另外也不方便重用,直接单独在Models中定义数据,可以减少很多不必要的麻烦)(可不加)

1
2
3
4
5
6
7
8

public class LogInfo
{
public string CILogId { get; set; }
public string ProjectName { get; set; }
public string CommitVersion { get; set; }
public string Submitter { get; set; }}




》》创建Controller方法控制器


然后右键Controllers文件夹,添加LogInfoControllers.cs,当然也可以不用名字相对应,但是当controller文件以及models数据文件多的时候,名字操作相对应显得尤为重要,好的代码习惯可以节省很多时间。

QQ截图20160416162423

QQ截图20160416162640

选择web Api 控制器-空(否则整个代码框架会发生很大变化),点击确定,更改名字为LogInfoControllers.cs,添加代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

List<LogInfo> LogInfos = new List<LogInfo>();

public LogInfoController()
{

LogInfos.Add(new LogInfo {
CILogId =“00001”,
ProjectName=“Demo”,
CommitVersion = “1234”,
Submitter = “xiaoming”

});
}

//获取所有数据接口
public List<LogInfo> GetAllLogInfo()
{
return LogInfos;
}

//end






注意在粘贴List<LogInfo> LogInfos = new List<LogInfo>()后,会看到报错,是因为没有进行引用,直接添加对数据文件的引用就行。

》》Router配置

在项目的app_start有一个WebApiConfig.cs文件,里面定义了默认路由,代码是这样的

1
2
3
4
5

config.Routes.MapHttpRoute(
name: “DefaultApi”,
routeTemplate: “api/{controller}/{action}/{id}”,
defaults: new { id = RouteParameter.Optional }
);





代码中的api就是地址中的api,{controller}对应的是Controllers文件夹下面的文件去掉controller后缀的名字,比如之前定义了一个LogInfoController.cs,那么去掉后缀就是LogInfo,刚好就是地址中的LogInfo,至于{id}是函数的参数,由于本函数并没有参数,那么就不用写。如果带参数,则用英文问号(“?”)连接{action}和{id},多个参数则用逻辑与(&)符号来连接{id}

http://localhost:53035/api/group/GetGroupMembersName?groupname=fgig

LogInfoController()是构造函数,主要给数据进行初始化,当然在平时项目中不可能像这样直接进行赋值,很多情况下需要连接数据库进行数据的检索获取,然后再进行赋值操作,这里为了简便,我就直接对其进行赋值!

而在GetAllLogInfo()中直接返回LogInfos信息,当远程访问的时候执行这个函数,就可以获得相应的数据!

其他文件不用更改,这样一个最简单的web api就实现了,只要部署一下就可以直接从远端获取数据了。当然,除了获取数据之外,还有从远端post,delete等一些基本的操作,这里就只列出一个get方法。

》》实现webapi访问

下面就是部署,直接可以远程访问数据。对于web api来说,他的部署有两种承载的方式,一个是自身承载,一个就是用iis部署,在vs中有自带的承载器,我们这里主要介绍windows系统的iis承载方法。

在用iis承载之前,要首先确定你的电脑iis是否已经开启!

(win7为例)

可以 依次点击 开始>控制面板>程序

13

找到“程序和功能”,点击打开或关闭Windows功能

2

进入到“打开或关闭Windows功能”页面后,找到”Internet信息服务“一栏,点击”Internet信息服务“前面的”+“将其自目录全部展开,分别将FTP、服务器、web管理工具、万维网服务目录下的所有选项进行勾选,最后点击”确定“即可。

742

QQ截63

这样 iis功能就已经开启了!

然后在开始>程序搜索框里输入“iis”,找到iis应用软件,并打开,下面就可以进行部署web api了。

QQ截图20160416170318

右击网站>添加网站

123

网站名字自己按照需要取,应用程序池选择默认就行,物理路径则是刚刚建立项目的物理地址(需要注意的是,物理地址的下一层是有bin文件的那一层,如下图,否则无法识别)

70936

ip地址分配本机的ip地址,端口选择一个没有正在使用的端口,比如11112,点击确定。

这样就已经部署好了一个web api ,但是现在你还缺少一个访问权限,这时候就需要你手动添加允许权限,最简单的解决方法就是:右击之前建立的项目>属性>安全>编辑>添加,在输入对象名称来选择框中输入“everyone”,

QQ截图20160416172525

点击检查名称>确认

QQ截图20160416172721

将修改,完全控制勾上

大功告成!

换台电脑,直接输入地址 http://ip地址:端口号/api/LogInfo

就可以直接看到在代码中的数据

QQ截图20160416172909

最后解释一下地址:ip地址:端口号就是在添加网站的时候自己添加上的

http://www.cuichongyang.cn/index.php/2016/04/16/web-api/

 

错误分析:

1.您被禁止访问互联网

我第一次搭建的时候,换了无数个端口,总是提示 您被禁止访问互联网,经过排查,端口也没有被占用,防火墙也已经关闭(只有80端口可以访问),查了好长时间也没有解决这个问题。

思来想去,组可能是安全软件禁止出80以外的端口访问网络。经排查发现是“净网大师”导致,后来联系客服人员反映情况,才知道Version>3.5的软件为了加大广告拦截效果关闭了电脑部分权限。

解决方法:关闭安全类软件、关闭防火墙

2.“/”应用程序错误

行 1:  <%@ Application Codebehind=”Global.asax.cs” Inherits=”LuckyGitlabStatWebAPI.WebApiApplication” Language=”C#” %>

解决方法:重新生成解决方案

 

文章目录
  1. 1. 错误分析:
|