多没有得到良好的W /属性路由?(Multiple GET no good w/ Attribute

2019-09-30 12:22发布

据说这是正确的:

/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()。

Answer 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() { }
}

电文读出的属性路由此属性的路由中的ASP.NET Web API 2



Answer 2:

这是传统的应用程序开发人员喜欢我额外的答案:

  • 迁移从VS 08(.NET 2.x的)一个巨大的遗留的.aspx web窗体应用VS 15(.NET 4.6)
  • 通过增加新的技术,如API复活。

周围挖之后, 这是最好的发现的。 如果你只是有没有Global.asax中的.cs,只需将它添加到的.asax。



文章来源: Multiple GET no good w/ Attribute Routing?