【问题标题】:Having more than one action in a webapi controller在 webapi 控制器中有多个操作
【发布时间】:2017-11-03 06:00:45
【问题描述】:

我有一个 web api 控制器,到目前为止,它只有一个操作,一切正常。我已尝试添加第二个操作,但无法访问它。

这是工作动作的方法签名和方法主体的片段:

[Route("data/add")]
[HttpPost]
public HttpResponseMessage Add(Message item)
{
    using(var ctx = new dbContext())
    {
        // add new message using EF. snip
    }
}

我遇到问题的操作的方法签名和方法主体片段是:

[Route("data/check")]
[HttpPost]
public HttpResponseMessage Check(DateTime date)
{
    using (var ctx = new dbContext())
    {
        // check if any messages after param date
        // snip
    }
}

这是我的路线配置。

public static void Register(HttpConfiguration config)
{
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
    config.Routes.MapHttpRoute(
        name: "Notification",
        routeTemplate: "{controller}/check"
    );
}

有趣的是我的另一个动作,正在工作的动作,可以通过

访问

数据/添加

这似乎与路由相矛盾。

编辑:我从 Postman 收到的消息是

未找到与请求 URI 'http://localhost:62243/data/check'匹配的 HTTP 资源

【问题讨论】:

  • 您使用的是哪个版本的 Asp.Net?
  • v4.0.30319 @Nikolaus
  • 你的控制器上也有路由属性吗?
  • 如果你删除会发生什么:config.Routes.MapHttpRoute(name: "Notification", routeTemplate: "{controller}/check");
  • @Nikolaus 路线在原帖中

标签: c# asp.net-web-api


【解决方案1】:

尝试将路由更改为默认路由并仅通过以下属性进行路由:

//Add this to your Controller
[RoutePrefix("api/{controller}")]
public class YourController:ApiController
{
   //Whatever code 

   // Only part-route necessary.
   [Route("add")]
   [HttpPost]
   public HttpResponseMessage Add(Message item)
   {
       using(var ctx = new dbContext())
       {
            // add new message using EF. snip
        }
   }

   // Like before 
   [Route("check")]
   [HttpPost]
   public HttpResponseMessage Check(DateTime date)
   {
       using (var ctx = new dbContext())
       {
           // check if any messages after param date
           // snip
       }
    }

}

【讨论】:

  • 为什么为 Add 方法而不是 Check 定义了路由前缀?
  • 我不明白:我有一个控制器的 RoutePrefix 和两个方法的 RouteAttribute。
  • 没有。你能发布你的 global.asax 和你的 webapiconfig 吗?如果我添加路由前缀,我会在启动项目时收到错误消息。我有多个控制器
  • @andrewb 不幸的是,我没有 global.asax 可以提供。您是否在 global.asax 中操纵了路由?如果您跳过 RoutePrefixAttribute,但将路由更改为仅操作名称,会发生什么情况?
猜你喜欢
  • 1970-01-01
  • 2013-03-18
  • 2019-02-16
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多