Web api路由两个控制器类似的动作和参数在一个动作中没有填充参数值

时间:2015-01-02 14:01:10

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

我有两个webapi控制器ControllerA和ControllerB。每个人都有一个POST动作,即

ControllerA

[HttpPost]
public HttpResponseMessage Action1(CustomObjectA req, string pan="")

ControllerB

 [HttpPost]
 public HttpResponseMessage Action2(CustomObjectB req, string mpxn="")

我的网络API路由如下所示

  config.Routes.MapHttpRoute(
      name: "Purchase",
       routeTemplate: "{controller}/{pan}",
       defaults: new
           {
               controller  = "ControllerA"
               pan = RouteParameter.Optional
            });

  config.Routes.MapHttpRoute(
      name: "Vend",
      routeTemplate: "{controller}/{mpxn}",
      defaults: new
      {
           controller = "ControllerB",
           mpxn = RouteParameter.Optional
      });

当我从fiddler调用POST请求到/ ControllerA / 1时它工作正常,但Action1中pan参数的值设置为1 但是当我从fiddler调用POST请求到/ ControllerB / 2时,它来到Action2但是没有设置mpxn的值,它是""。 有人可以帮我解释一下我在路由方面所犯的错误吗?

由于

1 个答案:

答案 0 :(得分:0)

希望这些链接对您有所帮助:attribute routing-1 attribute routing-2

  

属性路由使您可以更好地控制Web API中的URI。例如,您可以轻松创建描述资源层次结构的URI。

     

仍然完全支持早期的路由方式,称为基于约定的路由。实际上,您可以在同一个项目中结合使用这两种技术。