我有以下路由映射或WEB API
[Route("Foo/Id/{id=1}/bar")]
我想让Id在上面可选,但是从客户端来说无论我称之为路线都不匹配我得到404 我尝试过像
这样的事情Foo/Id//bar
但是没有用。如果参数不在最后,是否可以使用web api的可选参数?
答案 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" });