这是正确的:
/api/MyDataController.cs
public class MyDataController: ApiController
{
[HttpGet]
[Route("GetOne")]
public IHttpActionResult GetOne() { } // works w/o GetTwo
[HttpGet]
[Route("GetTwo")]
public IHttpActionResult GetTwo() { }
}
的.js
$http({method: 'GET', url: '/api/MyData/GetOne'})... //works w/o GetTwo
$http({method: 'GET', url: '/api/MyData/GetTwo'})...
与this post相同,API版本
<package id="Microsoft.AspNet.WebApi" version="5.2.3"
targetFramework="net461" />
致电一个和两个抱怨 GetOne ,
&#34;找到了与请求匹配的多个操作:GetOne类型 MyWeb.API.MyDataControllerGetOne类型 MyWeb.API.MyDataController&#34;
如果从Api控制器中删除GetTwo(),它会起作用。
答案 0 :(得分:1)
这看起来应用程序仍在使用基于约定的路由。
冲突的原因是因为默认的基于约定的路由模板api/{controller}/{id}
通常不提供像此api/{controller}/{action}/{id}
这样的操作参数。如果您希望在使用之前提供的模板时通过约定路由获得后期操作。
如果您想使用属性路由,则需要在WebApiConfig.cs
文件中启用属性路由,以便Rout
Atrribute能够正常工作。
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
您还需要更新路线以获得所需内容
[RoutePrefix("MyData")]
public class MyDataController: ApiController {
//GET MyData/GetOne
[HttpGet]
[Route("GetOne")]
public IHttpActionResult GetOne() { }
//GET MyData/GetTwo
[HttpGet]
[Route("GetTwo")]
public IHttpActionResult GetTwo() { }
}
答案 1 :(得分:0)
对于像我这样的传统应用开发者来说,这是另一个答案:
在挖掘之后,this是最好的发现。如果您只有没有.cs的Global.asax,只需将其添加到.asax即可。