首页 新闻 会员 周边 捐助

asp.net web api

0
悬赏园豆:10 [已解决问题] 解决于 2014-06-12 09:55
各位牛人们,大家好,关于web api有个问题请教大家。我设置的路由是api/{controller}/{action}/{id}
我在api中,写了一个get方法
[HttpGet]
[ActionName("productA")]
public Task<object> GetProduct(string pId,string pName)
{
  
}
 
我在客户端请求的地址是http://localhost:2699/api/products/productA?pid=12&pname=hao
这样的话我可以找到GetProduct方法,但是为什么,我的url多加了一个参数:
http://localhost:2699/api/products/productA?pid=12&pname=hao&type=1也能找到GetProduct这个方法呢?
以Querystring形式发送请求不能自动根据后台方法设置的参数去匹配吗?我希望是,如果后台的方法只有两个参数,我在url中输入三个参数,我希望是找不到这个方法的?有什么办法实现吗?
期待回复,祝好!
ljcheibao的主页 ljcheibao | 初学一级 | 园豆:132
提问于:2013-08-05 10:58
< >
分享
最佳答案
0

根据你的问题和后面的回答,建议你了解下mvc中URL模型(即路由机制),假设products控制器里只有这一个动作GetProduct,mvc中的路由机制是可以自定义url请求模式的,api/{controller}/{action}/{id}是你设定的url规则,所以请求的地址比如:http://localhost:2699/api/products/productA?pid=12&pname=hao,mvc框架会对应提取这个地址的参数,url地址中的api/products/productA分别对应上面url规则中的api/{controller}/{action}/{id},“{id}”被称为一个片段,会对应url模型提取对应的参数片段找不到对应的片段会使用路由的默认值,通过querystring的方式给定的参数地址无论后面在新加几个参数都是能匹配当前url规则的。所以你希望新增第三个参数且找不到该方法只有这个办法:api/products/productA/pid/pname

 总结一下:1、假设路由是这样定义的:

routes.MapRoute(
"myRoute", // 
"api/{controller}/{action}/{id}", // url规则
new { controller = "products", action = "productA" ,id=UrlParameter.Optional } // 参数默认值
);

下面的url地址都可以匹配的上即是都可以找到该GetProduct动作

http://localhost:2699/api/products?pid=12&pname=hao

http://localhost:2699/api/products/productA?id=12

http://localhost:2699/api/products?pid=12&pname=hao&t=...

http://localhost:2699/api/products/productA/id=12&pname=hao&pid=test

去掉路由products好像也可以匹配的上,可以测试看看。

收获园豆:5
yss小虾米 | 菜鸟二级 |园豆:238 | 2013-11-20 14:32

希望能帮到你

yss小虾米 | 园豆:238 (菜鸟二级) | 2013-11-20 14:34
其他回答(3)
0

在 api/{controller}/{action}/{id} 中限制参数匹配模式。

收获园豆:5
Launcher | 园豆:45050 (高人七级) | 2013-08-05 10:59

怎么限制,能否具体的举个例子?我不想改成api/products/productA/pid/pname这种格式,我希望是Querystring这种格式的:

http://localhost:2699/api/products/productA?pid=12&pname=hao

支持(0) 反对(0) ljcheibao | 园豆:132 (初学一级) | 2013-08-05 15:08

你好,能指点一二吗?

支持(0) 反对(0) ljcheibao | 园豆:132 (初学一级) | 2013-08-13 11:54
0

url route

chenping2008 | 园豆:9836 (大侠五级) | 2013-08-05 11:52

你好,请问怎么用url route,能否举一个例子。

支持(0) 反对(0) ljcheibao | 园豆:132 (初学一级) | 2013-08-05 15:08
0

呵呵,我对你这个问题也很感兴趣,有结果了告诉我一声

幕三少 | 园豆:1384 (小虾三级) | 2013-08-05 17:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册