什么是ASP.NET Core

ASP.NET Core 是一个跨平台的高性能开源框架,用于生成启用云且连接 Internet 的新式应用。

简单来说,就是比原来的ASP.NET新增了跨平台

ASP.NET Core 包含了ASP.NET Core MVCASP.NET Core Web API两部分,今天主要介绍ASP.NET Core Web API开发的常用技巧。ASP.NET Core 支持使用 C# 创建 RESTful 服务,也称为 Web API。

控制器Controllers

Web API 包含一个或多个派生自 ControllerBase 的控制器类。 Web API 项目模板提供了一个入门版控制器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;namespace WebAPI.Controllers
{[Route("api/[controller]")][ApiController]public class ValuesController : ControllerBase{// GET api/values[HttpGet]public ActionResult<IEnumerable<string>> Get(){return new string[] { "value1", "value2" };}// GET api/values/5[HttpGet("{id}")]public ActionResult<string> Get(int id){return "value";}// POST api/values[HttpPost]public void Post([FromBody] string value){}// PUT api/values/5[HttpPut("{id}")]public void Put(int id, [FromBody] string value){}// DELETE api/values/5[HttpDelete("{id}")]public void Delete(int id){}}
}

所以你每次在VS中Debug的时候,都会打开默认浏览器,然后跳转到http://localhost:3019/api/values

注意,不要使用Controller的派生类来处理Web API的请求,Controller的派生类是用来处理Web页面的,简单来说,就是返回一个页面而不是接口。

ControllerBase 类提供了很多用于处理 HTTP 请求的属性和方法。 我自己常用的如下:

404

return NotFound()

400

return BadRequest()

200(主要用于GET请求)

return Ok()

201(创建成功,主要用于POST请求)

return Created(string uri, object value);

这里提一下,如果想在返回状态响应码的同时返回自定义的json格式信息,可以这样做

在Models目录下定义一个返回信息类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using Newtonsoft.Json;namespace WebAPI.Models
{public class ReturnMessage{   public int code { get; set; }public string message { get; set; }}}

这个模型不需要映射数据库的表,因为我们不需要去增删改查数据库 。然后在接口里新建对象,直接塞进返回值。

// GET: api/test/getresultmessage
[HttpGet("getresultmessage")]
public async Task<ActionResult<NewAURequest>> GetBooleanSurvey(string titleId)
{try{ReturnMessage returnMessage = new ReturnMessage();returnMessage.message = "ok";returnMessage.code = 200;return Ok(returnMessage);}        catch (Exception ex){return BadRequest();}}

这样访问 http://127.0.0.1:3019/api/getresultmessage就能返回这样的json格式数据。

{"code": 200,"message": "ok"
}

关于路由

这个其实也是包含在控制器里的,但是我觉得比较重要,所以单独拿出来讲一下

当你在Models目录下创建一个TodoController的时候,这个控制器的根路由就是由下面这个控制,默认的如下

namespace TodoApi.Controllers
{[Route("api/[controller]")][ApiController]public class TodoController : ControllerBase{private readonly TodoContext _context;

对应的根路由就是http://127.0.0.1:3019/api/todo

将 [controller] 替换为控制器的名称,按照惯例,在控制器类名称中去掉“Controller”后缀。 对于此示例,控制器类名称为“Todo”控制器,因此控制器名称为“todo”****。 ASP.NET Core 路由不区分大小写。

模型Models

Web API接口开发无非增删改查,那么就得有对应的表数据,从简单的单表开始,没有关联关系。

在Models目录下添加模型类

namespace TodoApi.Models
{public class TodoItem{public long Id { get; set; }public string Name { get; set; }public bool IsComplete { get; set; }}
}

这里扩展一下其他常用字段的数据类型

// guid
public Guid Id { get; set; }
// int
public int Id { get; set; }
// Time
public DateTime submitTime { get; set; }

添加数据库上下文,位置也可以放在Models目录下

using Microsoft.EntityFrameworkCore;namespace TodoApi.Models
{public class TodoContext : DbContext{public TodoContext(DbContextOptions<TodoContext> options): base(options){}public DbSet<TodoItem> TodoItems { get; set; }}
}

注册数据库上下文(Startup.cs文件,位于项目根路径下)

  • 删除未使用的 using 声明。
  • 将数据库上下文添加到 DI 容器。
  • 指定数据库上下文将使用内存中数据库。
// Unused usings removed
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using TodoApi.Models;namespace TodoApi
{public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the //container.public void ConfigureServices(IServiceCollection services){services.AddDbContext<TodoContext>(opt =>opt.UseInMemoryDatabase("TodoList"));services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);}// This method gets called by the runtime. Use this method to configure the HTTP //request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{// The default HSTS value is 30 days. You may want to change this for // production scenarios, see https://aka.ms/aspnetcore-hsts.app.UseHsts();}app.UseHttpsRedirection();app.UseMvc();}}
}

剩下的我不想复制粘贴了,自己去看官网的文档https://docs.microsoft.com/zh-cn/aspnet/core/web-api/?view=aspnetcore-2.1

常用的Controller的用法

场景一

单表查询多条数据

假设有张表Person,包含Id和Name,Age,模型类如下:

namespace TodoApi.Models
{public class Person{public Guid Id { get; set; }public string Name { get; set; }public int Age{ get; set; }}
}

PersonController

// GET: api/getpersonlist
[HttpGet("getpersonlist")]
public  IEnumerable<Person> GetPersonList()
{try{var definitionView = _context.Person;return definitionView;}catch (Exception ex){return (IEnumerable<Person>)BadRequest();}}

访问http://127.0.0.1:3019/api/person/getpersonlist

{{"id": "020f8a77-b098-46b3-a708-211d9e4bffba","name": "Mike","age": 20},{"id": "616F9F07-931C-4CE3-BCC5-B4EC417076FC","name": "Jake","age": 18}
}

场景二

单表查询多条数据(URL携带参数)

假设我知道这个人的名字,需要查询单条数据

http://127.0.0.1:3019/api/person/getpersonlist/Mike,这个URL多了个参数

重新写一个方法映射新的URL请求

// GET: api/getpersonbyname/xxx
[HttpGet("getpersonbyname/{name}")]
public async Task<ActionResult<Person>> GetPersonByName(string name)
{try{var definitionView = await _context.Person.FirstOrDefaultAsync(o => o.Name == name);return definitionView;}catch (Exception ex){return BadRequest();}}
{"id": "020f8a77-b098-46b3-a708-211d9e4bffba","name": "Mike","age": 20
}

场景三

关联表查询单条数据(URL携带参数)

待续...

使用ASP.NET Core开发Web API入门相关推荐

  1. ASP.NET Core和Web API:用于管理异常和一致响应的自定义包装器

    目录 介绍 为什么? 怎么做? VMD.RESTApiResponseWrapper Nuget软件包 安装及使用 ASP.NET Core集成 ASP.NET Web API集成 样本响应输出 定义 ...

  2. C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案

    C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案 1.前言 2.安 ...

  3. 使用angular4和asp.net core 2 web api做个练习项目(四)

    第一部分: http://www.cnblogs.com/cgzl/p/7755801.html 第二部分: http://www.cnblogs.com/cgzl/p/7763397.html 第三 ...

  4. ASP.NET Core 教学 - Web API JSON 序列化设定

    用 JSON 作为 Web API 资料传递格式,并使用 camelCase 作为名称命名规则,几乎已成为通用的标准.ASP.NET Core Web API 也很贴心的把回传物件格式预设为 JSON ...

  5. 使用angular4和asp.net core 2 web api做个练习项目(二), 这部分都是angular

    上一篇: http://www.cnblogs.com/cgzl/p/7755801.html 完成client.service.ts: import { Injectable } from '@an ...

  6. 利用asp.net Core开发webapi对接云之家智能审批数据互联控件

    我们公司业务部门提出了一个合同管理的需求, 与金蝶的合同中没有包括ERP或业务系统, 只有云之家. 为了公司有限的IT预算,拼了. 步骤: 1.教程:使用 ASP.NET Core 创建 Web AP ...

  7. 送福利 | 送书5本《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发

    <ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...

  8. ASP.NET Core环境Web Audio API+SingalR+微软语音服务实现web实时语音识别

    处于项目需要,我研究了一下web端的语音识别实现.目前市场上语音服务已经非常成熟了,国内的科大讯飞或是国外的微软在这块都可以提供足够优质的服务,对于我们工程应用来说只需要花钱调用接口就行了,难点在于整 ...

  9. 《ASP.NET Core 与 RESTful API 开发实战》-- (第10章)-- 读书笔记

    第 10 章 部署 10.1 部署到 IIS ASP.NET Core 应用程序支持部署到 IIS 中,之后它将作为应用程序的反向代理服务器和负载均衡器,向应用程序中转传入的 HTTP 请求 默认情况 ...

  10. Angular和.NET Core Web API入门应用程序

    下载源160.2 KB 您可以在此处查看此项目的源代码和最新更新 这是Angular/.NET Core Web API入门应用程序,具有添加.编辑和删除客户的基本功能,因此您可以将其用作构建应用程序 ...

最新文章

  1. php批量修改图片地址,织梦网站内容页图片绝对路径设置及批量替换方法
  2. 【运筹学】线性规划数学模型 ( 单纯形法 | 第一次迭代 | 方程组同解变换 | 计算新单纯形表 | 计算检验数 | 入基变量选择 | 出基变量选择 )
  3. Laravel Scheduling Package
  4. VS2005下 auxDIBImageLoad() 这个函数真囧
  5. python科学计数法输出_python不以科学计数法输出的实例方法总结
  6. sleep()和yield()
  7. 静态代理模式(多线程底部原理)
  8. 《Python快速入门》基础知识扫盲课
  9. 今日恐慌与贪婪指数为94 贪婪程度有所上升
  10. 亿级流量系统架构之如何支撑百亿级数据的存储与计算
  11. 概率论基础知识整理(一)
  12. 倒计时1天,IMG、完美、腾讯技术大咖相聚直播间详解光线追踪技术
  13. 十分钟带你解读Effective C++(导读)
  14. 华为手机怎么连接苹果电脑?
  15. Python用PIL获取图片信息
  16. MNF最小噪声分离变换
  17. shell中vi的基本操作及Xshell 常用命令
  18. 重装系统“无法创建新的分区也找不到现有分区”
  19. 怎么在sp3上安装iis6.0
  20. Windows 11关闭系统更新的方法有哪些?

热门文章

  1. android系统级浮层,android 新手引导浮层的实现
  2. MATLAB 图像识别
  3. js 小写金额转大写金额
  4. GitHub:一款基于OCR技术的翻译器
  5. H5第三方专业支付接口、安全稳定、费率优惠
  6. stm32连接热敏打印机
  7. astrolog32 java_Astrolog32下载
  8. Zemax 全新 22.1 版本产品现已发布
  9. ad10搜索快捷键_AD中常用的快捷方式
  10. Oracle 中文排序 Oracle 中文字段排序