WebAPI从入门到精通Word文档下载推荐.docx

上传人:b****6 文档编号:19325406 上传时间:2023-01-05 格式:DOCX 页数:27 大小:158.20KB
下载 相关 举报
WebAPI从入门到精通Word文档下载推荐.docx_第1页
第1页 / 共27页
WebAPI从入门到精通Word文档下载推荐.docx_第2页
第2页 / 共27页
WebAPI从入门到精通Word文档下载推荐.docx_第3页
第3页 / 共27页
WebAPI从入门到精通Word文档下载推荐.docx_第4页
第4页 / 共27页
WebAPI从入门到精通Word文档下载推荐.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

WebAPI从入门到精通Word文档下载推荐.docx

《WebAPI从入门到精通Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《WebAPI从入门到精通Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。

WebAPI从入门到精通Word文档下载推荐.docx

2name:

"

DefaultApi"

3routeTemplate:

api/{controller}/{id}"

4defaults:

new{id=RouteParameter.Optional}

5);

可以看到,默认路由使用的固定的api作为Uri的先导,按照微软官方的说法,用于区分普通Web请求和WebService的请求路径:

可以看到,默认的路由规则只指向了Controller,没有指向具体的Action,因为默认情况下,对于Controller中的Action的匹配是和Action的方法名相关联的:

具体来说,如果使用上面的路由规则,对应下面的Controller:

publicclassUserController:

ApiController

{

publicList<

UserModel>

allModeList=newList<

(){

newUserModel(){Id=1,UserName="

zhang"

PassWord="

123"

},

newUserModel(){Id=2,UserName="

lishi"

123456"

newUserModel(){Id=3,UserName="

wang"

1234567"

};

//Getapi/User/

publicIEnumerable<

GetAll()

returnallModeList;

//Getapi/User/1

GetOne(intid){

returnallModeList.FindAll((m)=>

{returnm.Id==id;

});

//POSTapi/User/

publicboolPostNew(UserModeluser)

try

allModeList.Add(user);

returntrue;

catch{

returnfalse;

//Deleteapi/User/

publicintDeleteAll()

returnallModeList.RemoveAll((mode)=>

{returntrue;

//Deleteapi/User/1

publicintDeleteOne(intid){

returnallModeList.RemoveAll((m)=>

//Putapi/User

publicintPutOne(intid,UserModeluser)

List<

upDataList=allModeList.FindAll((mode)=>

{returnmode.Id==id;

foreach(varmodeinupDataList)

mode.PassWord=user.PassWord;

mode.UserName=user.UserName;

returnupDataList.Count;

则,会有下面的对应关系:

URLHttpMethod对应的Action名

/api/UserGETGetALL

/api/User/1GETGetOne

/api/UserPOSTPostNew

/api/User/1DELETEDeleteOne

/api/UserDELETEDeleteALL

/api/UserPUTPutOne

(5)客户端JS调用

functiongetAll(){

$.ajax({

url:

api/User/"

type:

'

GET'

success:

function(data){

document.getElementById("

modes"

).innerHTML="

"

;

$.each(data,function(key,val){

varstr=val.UserName+'

:

+val.PassWord;

$('

<

li/>

'

{html:

str}).appendTo($('

#modes'

));

}).fail(

function(xhr,textStatus,err){

alert('

Error:

+err);

functionfind(){

api/User/1"

 

functionadd(){

POST"

dataType:

json"

data:

{"

Id"

4,"

UserName"

admin"

"

PassWord"

666666"

getAll();

functionremoveUser(){

api/User/3"

DELETE'

functionremoveAll(){

functionudpate(){

PUT'

{Id:

1,"

},

这样就实现了最基本的CRUD操作。

扩展需求

问题1:

我想按照用户名称(UserName)进行查询,怎么办?

办法:

在UserController类中加一个方法名称叫:

GetUserByName,如下所示:

publicUserModelGetUserByName(stringuserName){

returnallModeList.Find((m)=>

{returnm.UserName.Equals(userName);

在客户端index.cshtml中调用

functiongetUserByName(){

api/User/zhang"

varstr=data.UserName+'

+data.PassWord;

如果URL是:

将会报错:

BadRequest

原因是他会自动调用我们的GetOne(intid)这个方法,类型转换出错

解决办法:

改变URL为:

api/User/?

userName=zhang"

问题2:

我想按用户名称(UserName)和用户密码(PassWord)一起来进行查询,怎么办?

解决办法

UserController类中,可以重载一个GetUserByName的方法,如下所示:

客户端调用:

url:

userName=zhang&

passWord=123"

//这里尤其需要注意

(6)路由规则扩展

和普通的MVC一样,MVCWebAPI支持自定义的路由规则,如:

在上面的操作中,路由规则使用

则限定了使用GET方式利用URL来传值时,controller后面的接收参数名为id,但是在Controller中,如果GetOne方法的接收参数名为key,是不会被匹配的,这是只需要新增一个新的路由规则,或修改原先的路由规则为:

api/{controller}/{key}"

如下所示:

config.Routes.MapHttpRoute(

name:

routeTemplate:

defaults:

new{key=RouteParameter.Optional}

);

当然,可以对路由进行更深的扩展,如:

扩展成和普通MVC一样的路由:

api/{controller}/{action}/{id}"

这样,就要求同时使用Action和HTTP方法进行匹配

当然,根据微软的说法,这种使用是不被推荐的,因为这不符合大家对WebService的一般认知:

(7)使用Attribute声明HTTP方法

[HttpGet]

TestUseMode>

FindAll()

FindByKey(stringkey)

[HttpPost]

publicboolAdd(TestUseModemode)

[HttpDelete]

publicintRemoveByKey(stringkey)

publicintRemoveAll()

[HttpPut]

publicintUpdateByKey(stringkey,stringvalue)

[NonAction]

publicstringGetPrivateData()

当然,我只列出了方法名,而不是这些方法真的没有方法体...方法体是不变的,NoAction表示这个方法是不接收请求的,即使以GET开头。

如果感觉常规的GET,POST,DELETE,PUT不够用,还可以使用AcceptVerbs的方式来声明HTTP方法,如:

[AcceptVerbs("

MKCOL"

HEAD"

)]

publicintUpdateByKey(stringkey,stringvalue)

{if(mode.ModeKey==key)returntrue;

foreach(varmodeinupDataList)

mode.ModeValue=value;

附:

什么是REST风格?

参考:

什么是REST风格

hi.baidu./yankaiwei/item/1f0b37dd922d53ef3cc2cb69

第二部分:

综合示例:

应用ASP.NETMVC4+WebAPI+FluentData开发Web应用

创建数据库

NorthWind数据库的Customers表

CreateDataBaseNorthWind

Go

UseNorthWind

CREATETABLE[dbo].[Customers](

[CustomerID][nchar](5)NOTNULL,

[CompanyName][nvarchar](40)NOTNULL,

[ContactName][nvarchar](30)NULL,

[ContactTitle][nvarchar](30)NULL,

[Address][nvarchar](60)NULL,

[City][nvarchar](15)NULL,

[Region][nvarchar](15)NULL,

[PostalCode][nvarchar](10)NULL,

[Country][nvarchar](15)NULL,

[Phone][nvarchar](24)NULL,

[Fax][nvarchar](24)NULL,

CONSTRAINT[PK_Customers]PRIMARYKEYCLUSTERED

[CustomerID]ASC

)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[PRIMARY]

GO

创建FluentData.Entity层,创建Customer实体类

namespaceFluentData.Entity

publicclassCustomer

publicstringCustomerID{get;

publicstringCompanyName{get;

publicstringContactName{get;

publicstringContactTitle{get;

publicstringAddress{get;

publicstringCity{get;

publicstringRegion{get;

publicstringPostalCode{get;

publicstringCountry{get;

publicstringPhone{get;

publicstringFax{get;

第三步:

利用FluentData做数据的持久化

首先引入FluentData.cs(见附件)

其次:

创建DBHelper类,代码如下:

publicclassDBHelper

publicstaticIDbContextContext(){

//returnnewDbContext().ConnectionString("

server=127.0.0.1;

uid=sa;

pwd=sa;

database=TestDB"

newSqlServerProvider());

returnnewDbContext().ConnectionStringName("

connString"

然后不要忘记修改ASP.NETMVC层所在的Web.config,加入数据库连结字符串:

<

connectionStrings>

addname="

connectionString="

database=Northwind;

/>

/connectionStrings>

创建CustomerService数据持久化类,代码如下:

publicclassCustomerService

privateIDbContextcontext=DBHelper.Context();

publicCustomerSelect(stringcustomerId){

returncontext.Select<

Customer>

("

*"

).From("

Customers"

).Where("

CustomerID=0"

).Parameters(customerId)

.QuerySingle();

SelectAll(){

).QueryMany();

SelectAll(stringsortEx

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1