【问题标题】:How to put multiple GET methods in Web API2 controller?如何在 Web API 2 控制器中放置多个 GET 方法?
【发布时间】:2017-02-10 12:02:34
【问题描述】:

我正在做一个 Web API 2 应用程序,我有一个名为 NCT_ProcessSettings 的控制器,并且我已经有两个 GET 方法,如下所示。

1. public IEnumerable<Process_Settings> Get()
2. public HttpResponseMessage Get(int id)

现在我想要第三个如下(与第一个相同,但里面我会写不同的逻辑)。

3. public IEnumerable<Process_Settings> Get() //Compiler will confuse which to pick?

我尝试如下。

[HttpGet]
[Route("GetGlobalSettings")]
public IEnumerable<NCT_Process_Settings> GetGlobalSettings()
{
    return entityObject.NCT_Process_Settings.Where(c => c.project_id == 0).ToList();
}

下面是我调用 api 的 angularcode。

 var url = '/api/NCT_ProcessSettings/GetGlobalSettings';

我可以知道如何解决这个问题吗?任何帮助将不胜感激?

【问题讨论】:

标签: c# asp.net-mvc-5 asp.net-web-api2 asp.net-web-api-routing


【解决方案1】:

在基于约定的路由之前在 WebApiConfig.cs 中启用属性路由。

config.MapHttpAttributeRoutes();

接下来更新控制器以使用路由属性。 (注意路由前缀)

[RoutePrefix("api/NCT_ProcessSettings")]
public class NCT_ProcessSettingsController : ApiController {

    //GET api/NCT_ProcessSettings
    [HttpGet]
    [Route("")]
    public IEnumerable<Process_Settings> Get() { ... }

    //GET api/NCT_ProcessSettings/5
    [HttpGet]
    [Route("{id:int}")]
    public HttpResponseMessage Get(int id) { ... }

    //GET api/NCT_ProcessSettings/GetGlobalSettings
    [HttpGet]
    [Route("GetGlobalSettings")]
    public IEnumerable<NCT_Process_Settings> GetGlobalSettings() { ... }

}

在此处阅读更多文档Attribute Routing in ASP.NET Web API 2

【讨论】:

  • 谢谢,所以如果我想调用任何 API,那么 localhost:22045/api/NCT_ProcessSettings/GetGlobalSettings 这样对吗?
  • 对于那个控制器是的。查看答案中每个操作上方的示例 cmets,它显示了对该操作的请求的外观。您还应该花一些时间阅读 web api 文档。
【解决方案2】:

使用的动作名称属性

       [ActionName("Get")]
       public IEnumerable<Process_Settings> Get1()//used any name here
       {
       }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    相关资源
    最近更新 更多