【问题标题】:Multiple routes for http POST request within the same API Controller in c#c#中同一API控制器中http POST请求的多个路由
【发布时间】:2018-05-30 12:56:08
【问题描述】:

我正在实现后端控制器,其中两个 http post 请求使用两个独立的路由(routea 和 routeb),使用两个不同的操作:

例如:

http://some_domain/api/work/routea

http://some_domain/api/work/routeb

这是控制器的配置方式:

    var config = new HttpConfiguration();

    config.Routes.MapHttpRoute(
        name: "ControllerAndAction",
        routeTemplate: "api/work/{controller}");

这将是控制器的实现:

[RoutePrefix("api/work")]    
public class MyController : ApiController
{
        [HttpPost]
        [Route("routea")]
        public HttpResponseMessage RouteA(HttpRequestMessage request)
        {...}

        [HttpPost]
        [Route("routeb")]
        public HttpResponseMessage RouteB()
        {...}

}

我似乎无法开始执行这些功能。另一方面,如果其中两个调用保存在单独的控制器中(例如 AController.cs 和 BController.cs) - 一切正常。我需要在同一个控制器类中拥有两条路由。这里出了什么问题?

【问题讨论】:

  • 我看不到您在哪里注册属性路由。
  • 如果 RouteB 被注释了,那么 RouteA 工作正常,它们曾经在单独的控制器类中并且工作正常。
  • 我认为这可能是由于方法签名。如果您使用其中一种路由方法来接收参数,它应该可以工作(例如......类对象/字符串/int或其他)......
  • 再一次,你在哪里打电话MapHttpAttributeRoutes
  • 请在问题中包含您的完整路线注册。

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


【解决方案1】:

如果您使用这样的结构来定义基本路由配置,那么您可以只使用“routea”和“routeb”作为控制器的名称。

routeTemplate: "api/work/{controller}");

试试这个:

routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }

在这种情况下,您的控制器的实现应该一切正常。

【讨论】:

    猜你喜欢
    • 2017-11-11
    • 2013-09-10
    • 2015-02-23
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2015-09-10
    相关资源
    最近更新 更多