它可能有重复,但我没有找到正确的解决方案,
我的网页api,
public class SampleController : ApiController
{
public string Get(int id)
{
return "value";
}
public string hello(int id)
{
return "value";
}
}
我的webapiconfig,
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我的问题是
当我打电话给http://localhost:1234/api/Sample/5时它会点击Get(int id)但我怎么能调用方法2,即hello(int id)??什么需要改变,以及处理这类情景的最佳方法是什么?
答案 0 :(得分:1)
<强> TLDR:强>
如果要在Web API中引用各个操作,请将路由更改为:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
然后您可以像这样访问您的操作:localhost / api / {controller} / {action} /。请查看here以获取更多信息,尤其是"Routing by Action Name"。
<强>原稿:强>
您似乎期望与MVC控制器具有相同的行为。 MVC控制器的标准路由是这样的:
routeTemplate: "{controller}/{action}/{id}"
这对应于控制器的名称,要使用的方法和某种形式的输入。 ApiControllers路线不同:
routeTemplate: "staticPart/{controller}/{id}"
正如您所看到的,只有对单个控制器和输入的引用,以及&#34; staticPart&#34;通常是/ api /
这个想法是你使用RESTful方法,用不同类型的http方法连接方法(例如DELETE,GET,POST,PUSH和PUT)
您的示例中的Get方法是一个特殊的,因为通过名称&#34; Get&#34;你告诉编译器这个方法与HTTP-GET相对应。
所以要回答你的问题:要么将路由更改为MVC-Controller的路由。这样您就可以在请求中引用各个操作,或者使用不同的HTTP方法。或者您按照MaxB
所示单独设置路线您可以找到有关Web API路由的官方概述here您可以找到有关所有可能性的示例。