简单使用ASP.NET CORE WEBAPI(1)

//首先将mvc注册到容器中
public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(); // 注册MVC到Container
        }
//然后我们在configure里面使用mvc中间件
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler();
            }
			//使用mvc中间件
            app.UseMvc();

路由:
路由有两种方式:
1.convention-based(按约定)
主要用于mvc(返回view或者razor page那种)
2.attribute-based(基于路由属性配置的)
webapi推荐使用

基于这种配置属性可以配置Controller或者Action级别的,
uri会根据http method来匹配到一个controller的具体action上。
常见的:

Get, 查询, Attribute: HttpGet, 例如: '/api/product', '/api/product/1'
POST, 创建, HttpPost, '/api/product'
PUT 整体修改更新 HttpPut, '/api/product/1'
PATCH 部分更新, HttpPatch, '/api/product/1'
DELETE 删除, HttpDelete, '/api/product/1

还有一个Route属性(attribute)也可以用于Controller层, 它可以控制action级的URI前缀.

namespace CoreBackend.Api.Controllers
{
    //[Route("api/product")]
    [Route("api/[controller]")]
    public class ProductController: Controller
    {
        [HttpGet]
        public JsonResult GetProducts()
        {
            return new JsonResult(new List<Product>
            {
                new Product
                {
                    Id = 1,
                    Name = "牛奶",
                    Price = 2.5f
                },
                new Product
                {
                    Id = 2,
                    Name = "面包",
                    Price = 4.5f
                }
            });
        }
    }
}

1.使用attribute(标签)
[Route(""api/[controller])],使得整个Controller下面的所有action的uri的前缀变成了/api/product,
2.[controller]表示XxxController的Xxx(小写);
3.然后在GetProducts方法上面, 写上HttpGet, 也可以写HttpGet(). 它里面还可以加参数,例如: HttpGet(“all”), 那么这个Action的请求的地址就变成了 “/api/product/All”.

WebApi常见的status code

200: OK

201: Created, 创建了新的资源

204: 无内容 No Content, 例如删除成功

400: Bad Request, 指的是客户端的请求错误.

401: 未授权 Unauthorized.

403: 禁止操作 Forbidden. 验证成功, 但是没法访问相应的资源

404: Not Found 

409: 有冲突 Conflict.

500: Internal Server Error, 服务器发生了错误.

目前我们的返回的JsonResult继承于ActionResult,
ActionResult实现了IActionResult接口。
(web api不一定返回的都是json数据)
例如:我们想返回数据和状态码

[HttpGet]
        public JsonResult GetProducts()
        {
            var temp = new JsonResult(ProductService.Current.Products)
            {
                StatusCode = 200
            };
            return temp;
        }

asp.net core内置了很多方法都可以返回IActionResult,如:
Ok,NotFound,BadRequest
例子:

[HttpGet]
        public JsonResult GetProducts()
        {
            var temp = new JsonResult(ProductService.Current.Products)
            {
                StatusCode = 200
            };
            return temp;
        }

asp.net core里面有一个status code middleware

app.UseStatusCodePages();

结果的格式:
asp.net core 2.0的默认返回结果格式是Json,并使用json.net 对结果默认做了camel case的转化。(首字母小写)

内容协商
若web api提供了多种内容格式,那么可以通过Accept Header来选择最好的内容返回格式,如:
application/json,application.xml。
asp.net core默认提供的是json
我们可以在app.UseMvc()中修改它的返回格式!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值