如何在 Web API 2 控制器中放置多个 GET 方法?
Posted
技术标签:
【中文标题】如何在 Web API 2 控制器中放置多个 GET 方法?【英文标题】:How to put multiple GET methods in Web API2 controller? 【发布时间】: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';
我可以知道如何解决这个问题吗?任何帮助将不胜感激?
【问题讨论】:
使用属性路由 - 参考this answer 谢谢。但我最终得到了***.com/users/3559349/stephen-muecke 你点击的是我的名字,而不是链接(“这个答案”):) 我尝试加载资源失败:服务器响应状态为 400(错误请求) 【参考方案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
【讨论】:
以上是关于如何在 Web API 2 控制器中放置多个 GET 方法?的主要内容,如果未能解决你的问题,请参考以下文章
我在 Spring Boot 中放置了基本身份验证,但是我们如何在没有身份验证登录的情况下访问一些 Api