在上一篇里,我已经建立了一个简单的Web-Demo应用程序。这一篇将记录将此Demo程序改造成一个WebApi应用程序。
一、添加ASP.NETCoreMVC包1.在project.json文件添加Microsoft.AspNetCore.Mvc包
{
version:1.0.0-*,
buildOptions:{
debugType:portable,
emitEntryPoint:true
},
dependencies:{
Microsoft.NETCore.App:{
type:platform,
version:1.0.0
},
Microsoft.AspNetCore.Server.Kestrel:1.0.0,
Microsoft.AspNetCore.Mvc:1.0.0
},
frameworks:{
netcoreapp1.0:{
imports:dnxcore50
}
}
}
2.在cmd窗口使用dotnetrestore将新添加的包还原至本地
二、修改Startup.cs文件内容,添加ASP.NETMvc能力usingMicrosoft.AspNetCore.Builder;
usingMicrosoft.Extensions.DependencyInjection;
namespaceWebApiFrame
{
publicclassStartup
{
publicvoidConfigureServices(IServiceCollectionservices)
{
//注入MVC框架
services.AddMvc();
}
publicvoidConfigure(IApplicationBuilderapp)
{
//添加MVC中间件
app.UseMvc();
}
}
}
三、新建Controller,编写WebApi方法1.控制器UsersController
usingSystem;
usingMicrosoft.AspNetCore.Mvc;
usingWebApiFrame.Models;
namespaceWebApiFrame.Controller
{
[Route(api/[controller])]
publicclassUsersController:Microsoft.AspNetCore.Mvc.Controller
{
[HTTPGet({id})]
publicIActionResultGet(intid)
{
varuser=newUser(){Id=id,Name=Name:+id,Sex=Male};
returnnewObjectResult(user);
}
[HTTPPost]
publicIActionResultPost([FromBody]Useruser){
if(user==null){
returnBadRequest();
}
//TODO:新增操作
user.Id=newRandom().Next(1,10);
returnCreatedAtAction(Get,new{id=user.Id},user);
}
[HTTPPut({id})]
publicIActionResultPut(intid,[FromBody]Useruser){
if(user==null){
returnBadRequest();
}
//TODO:更新操作
returnnewNoContentResult();
}
[HTTPDelete({id})]
publicvoidDelete(intid){
//TODO:删除操作
}
}
}
不同于之前的ASP.NETMVC版本,ASP.NETCoreMVC里实现WebApi的控制器都继承自唯一的一个基类Controller。
2.模型User.cs
namespaceWebApiFrame.Models
{
publicclassUser
{
publicintId{get;set;}
publicstringName{get;set;}
publicstringSex{get;set;}
}
}
最终文件夹结构如下图
四、启动调试,使用Fiddler工具调试WebApi接口1.GETRequest
GETResponse
2.POSTRequest
POSTResponse
POST响应码为,表示资源创建成功。
在响应头里有一个Location属性,这是一个导航属性,属性值是一个url地址,直接指向了刚刚Post成功的资源地址。
3.PUTRequest
PUTResponse
PUT为更新操作。按照规范,当服务更新操作执行成功后,直接通过响应码告诉客户端调用成功,默认没有响应body。
4.DELETERequest
DELETEResponse
DELETE为删除操作。按照规范,需要通过响应码判断是否成功()还是失败(),默认没有响应body。
原文