用WebAPI2( OWIN )实现RESTful service [二](基于Attribute Routing)

背景:上一篇我用convention-based机制实现了RESTful service,这里我用Attribute Routing机制再实现一次。中间遇到的坑通过阅读combining-route-mappings-in-webapi找到了答案。

新增功能:Request通过Post完成,数据来自Request body,格式是raw (application/json)

code差异:

1. Startup.cs

using Owin;
using System.Web.Http;
using Microsoft.Owin.StaticFiles;
using Microsoft.Owin.FileSystems;
class Startup
    {
        //Note:这里只开启了Attribute Routing, convention Routing没开。
        public void Configuration(IAppBuilder appBuilder)
        {
            // Configure Web API for self-host. 
            HttpConfiguration config = new HttpConfiguration();
            config.MapHttpAttributeRoutes(); //Turn on Attribute Routing
            //之前使用config.Routes.MapHttpRoute(...)这部分我移除了
            appBuilder.UseWebApi(config);
            
        }
    }

2. MyController.cs 

using System.Web.Http;
using System.Collections.Generic;
namespace demo
{
 [RoutePrefix("api")]
   public class MyController:ApiController  //小心,必须public,否则Client会收到404错误
    {
        //之前convention-based机制下,Method是Get开头就能调用了
        [Route("")]
        [HttpGet]
        public IEnumerable<string> AllProducts()
        {
            return new string[] { "value1", "value2" };
        }
        [HttpGet]
        [Route("{id}")]
        public string Product(int id)
        {
            return "haha";
        }
        //数据必须来自body,而且是raw 的application/json
        [Route("AddInfo")]
        [HttpPost]
        async  public void addInfo2Show()
        {
            string content = await this.Request.Content.ReadAsStringAsync();
           //可以传给其他function了
            
        }

        //这里是用同步的方法获取Request里body的内容,与addInfo2Show()不同
        //forums.asp.net/t/1772530.aspx?Making+a+request+synchronously
        [Route("reboot")]
        [HttpPost]
         public string RebootOS()
        {
            string content = this.Request.Content.ReadAsStringAsync().Result;
            
            return "{'Result':'Succeed'}";
        }
    }
}

3. 我是通过Postman来发送测试数据的。

   

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值