mvc4 webapi里一个controller对应多个post方法
在asp.net mvc 4里,webapi中,正常情况下,一个控制器只能有一个post方法,但是想要用多个呢,怎么办,要是mvc5就好了,只需加个注解就行了,可是在mvc4里,就只能改变路由规则了,
原路由如下
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
改变后
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
这样就OK了,下面来测试

post1:
<script>
$(function () {
$.ajax({
url: "http://localhost:33953/api/values/post1",
data: {"": "qqq" },
type: "post",
success: function (data) {
}
});
})
</script>
post2
<script>
$(function () {
$.ajax({
url: "http://localhost:33953/api/values/post2",
data: {"": "qqq" },
type: "post",
success: function (data) {
}
});
})
</script>
尽管post1和post2里的方法参数不一样,其实没关系的,对于Frombody来说,""=value,没有key,对于value的话,更好说了,无论你的参数起什么名字,最后传进来的都是前端定义好的value,哈哈
post3
<script>
$(function () {
$.ajax({
url: "http://localhost:33953/api/values/post3",
type: "post",
contentType: "application/json",
data: JSON.stringify({ Id: "009", Name: "school", Age: 26 }),
success: function (data) {
}
});
})
</script>
一切正常,ok
总结:其实对于这种基于 action 的post来说其实挺好用的,它摆脱了想get时要传递不同参数(个数|类型|名称)的参数问题,只要post方法名不一样,参数随便来,很灵活,再补充一下,改了路由规则后,原来的get的路由就不适用了,有没有原来get规则不变,而同时并存多个post方法的解决办法呢,只能以后求高人解答了。
补充:get方式其实也特好用

对于第一种:http://localhost:33953/api/values?id=123 或者http://localhost:33953/api/values/123
对于第二种:http://localhost:33953/api/values?name=123
对于第三种:http://localhost:33953/api/values?group=asd
其实对于第二种和第三种的比较,你会发现,其实这种方式已经打破了 路由规则了,通过参数名的形式,可以做到在一个controller里共存多个get方法,写起来随心所欲,还是比较好用的。
超级简单好用,哈哈
浙公网安备 33010602011771号