【问题标题】:Config Routing to functions other than the default ones配置路由到默认功能以外的功能
【发布时间】:2014-07-25 11:50:58
【问题描述】:

在我的控制器类中我实现了我的接口,控制器类是 ApiController 的子类

我的 API 有一个名为 Read 的方法。 我希望默认的 Get() 调用 Read()。

不用做

Get()
{
    Read();
}

我也不想做 /api/{controller}/{action}/{id}

我希望 /api/{controller}/{id} 路由到 Read() 方法而不是 Get()

问题是: 假设我有一个名为 Devices 的控制器。当对 /api/Devices/ 的 GET 请求发生时,我希望它调用我的特定方法,而不是 APIController 的 Get() 方法。

【问题讨论】:

  • 你的问题是什么?

标签: c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

您可以使用 ASP.NET Web API 属性路由! (http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2)

[HttpGet]
[Route("api/MyController/MyAction")]
public string Read() {
   return "You issued a GET request to the Read method";
}

您可以对路线做任何您想做的事情,只需确保您在WebApiConfig 中映射路线,如下所示:config.MapHttpAttributeRoutes();(有关详细信息,请参阅文章)。

【讨论】:

  • 可以从接口继承吗?
  • 如果您说您的控制器从 ApiController 扩展并实现了一个接口 IMyInterface,其中包含 Read() 的定义,那么是的。
  • 我想知道应用于接口的属性是否可以继承到实现类中。但根据微软的说法,这是不可能的。这是一篇文章bradwilson.typepad.com/blog/2011/08/…
  • 啊,我明白你的意思了。是的,属性不是那样“继承”的;它们在它们所处的任何上下文中都带有语义含义(因此界面上的属性在界面的上下文中意味着某些东西,而在控制器中的属性,即[HttpGet] 意味着那里的东西)。
猜你喜欢
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 2012-05-19
  • 1970-01-01
  • 2015-08-12
  • 2011-12-28
  • 2018-04-01
相关资源
最近更新 更多