Web API中间的可选参数

时间:2014-03-14 15:26:08

标签: routing asp.net-web-api asp.net-web-api2

我有以下路由映射或WEB API

[Route("Foo/Id/{id=1}/bar")]

我想让Id在上面可选,但是从客户端来说无论我称之为路线都不匹配我得到404 我尝试过像

这样的事情
Foo/Id//bar

但是没有用。如果参数不在最后,是否可以使用web api的可选参数?

4 个答案:

答案 0 :(得分:0)

使用0代替空白参数,当获得0时,使用它就像空白一样。

答案 1 :(得分:0)

please refer to this article regarding route attribute

您可以像这样使用它并提供默认值。

您的属性将如下所示:

[Route("Foo/Id/{id:int=0}/bar")]

然后处理0,好像没有值(如上所述)。

答案 2 :(得分:0)

我有一个类似的问题,我的解决方案是使路由属性可以为空,并在我不想提供值时传递一个空参数。对你而言,这将是:

[Route("Foo/Id/{id:int?}/bar")]

然后我在控制器动作的逻辑中处理了null条件。我猜你可以在控制器动作中分配一个默认值,如下所示(c#):

///<summary>
/// Get my foo's bars
///</summary>
[Route("Foo/Id/{id:int?}/bar")]
public HttpResponseMessage Get(int? id)
{
    var fooId = id ?? 1; // fooId will be of type System.Int32.
    ...

所以你可以打电话给其中任何一个:

~/Foo/Id/null/bar
~/Foo/Id/5/bar

此解决方案适合我。

答案 3 :(得分:0)

您无法在网址中使用//。 制作您想要的东西的唯一方法是为一个端点映射2条路线。 对于考试

config.Routes.MapHttpRoute(
   name: "BarRoute",
   routeTemplate: "Foo/Id/{id}/bar",
   defaults: new { controller = "Foo" });

config.Routes.MapHttpRoute(
   name: "BarDefaultRoute",
   routeTemplate: "Foo/Id/bar",
   defaults: new { controller = "Foo" });