据说这是正确的:
/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'})...
同这个职位 ,API版本
<package id="Microsoft.AspNet.WebApi" version="5.2.3"
targetFramework="net461" />
对一 , 二两个呼叫抱怨GetOne,
“多的行动中发现匹配的要求:对类型MyWeb.API.MyDataControllerGetOne GetOne的类型MyWeb.API.MyDataController”
它从AP控制器工作,如果REM出GetTwo()。
这看起来像应用程序仍在使用基于约定的路由。
究其原因,冲突是因为基于约定的默认路由模板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() { }
}
电文读出的属性路由此属性的路由中的ASP.NET Web API 2
这是传统的应用程序开发人员喜欢我额外的答案:
- 迁移从VS 08(.NET 2.x的)一个巨大的遗留的.aspx web窗体应用VS 15(.NET 4.6)
- 通过增加新的技术,如API复活。
周围挖之后, 这是最好的发现的。 如果你只是有没有Global.asax中的.cs,只需将它添加到的.asax。