Webapi 路由 (2) MVC风格

1.路由配置

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

2.上面的路由配置中,由于id是可选项,所以在控制器中,可以没有带参数的方法,比如控制器ProductController中有一个GetProducts()的方法,用api/Product/GetProducts和api/Product/GetProducts/1  效果是一样的,都指向GetProducts()方法。

   反之,如果只有带参数的方法,那么使用api/Product/GetProducts就会报错,因为路由模板匹配不到相应的方法。

3.如果以get、put、delete开头新建一个方法,则该方法默认以HttpGet、HttpPut、HttpDelete标记。因此,如果以post方式访问get开头的方法时会报405的错误,解决的方法是,将方法显示标记为HttpPost。所以方法的命名很重要,一定要规范,比如一个更新操作就应该以put方法来提交,处理方法以HttpPut标记,这样符合restful的风格,对代码的阅读和维护也有益处。

4.除了以上,任意新建的方法都会以HttpPost标记,所以前台访问时也要用POST方式。

5.webapi的参数可以用一下方法获取

 HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"];
 HttpRequestBase request = context.Request;

   如果是get方式提交,则使用: var name= request.Form["Name"];

   如果是post方式提交,则使用: var name = request.QueryString["Name"];

   除了get方式,其他方式提交的数据其实都是在form表单中,可以使用request.Form[]来获取

6.服务器端的方法可以用model实体来接收客户端提交的数据,服务器端会根据提交数据的属性名称与实体的属性名称匹配,匹配成功则赋值,匹配不到则忽略,最终可以在方法的参数中获取该实体。

7. 代码

Demo

posted on 2016-04-14 15:54  DeepSpace  阅读(228)  评论(0编辑  收藏  举报