如何绕过例外的ASP.NET Web API发现多个操作(How to bypass the exc

2019-09-20 12:35发布

当试图找到这个问题如下解决方案:

MVC网页API路线与默认操作不工作

主要是我在整个问题上运行“多个动作被发现”。 如果路由机制发现与路由匹配不止一个动作,它抛出异常500。

例如,在ValuesController两个动作:

[HttpGet]
public IEnumerable<String> Active()
{
    var result = new List<string> { "active1", "active2" };
    return result;
}

public IEnumerable<string> Get()
{
    return new[] { "value1", "value2" };
}

它匹配默认路由:

 routes.MapHttpRoute(
          name: "DefaultApi",
          routeTemplate: "api/{controller}/{id}",
          defaults: new { id = RouteParameter.Optional }
      );

GET: /api/values 

会得到错误多个动作被发现。

我的问题:我如何可以通过选择指定动作绕过异常“多的行动被发现”(选择第一个匹配的动作也没关系)。

更新1:从tugberk的评论更新,感谢指出。

更新2:从迈克的评论更新,似乎这个问题是不正确的多,所以我改变的不提路由约束问路。

谢谢

Answer 1:

首先,它不应该是可能的,除非你申请HTTPGET属性上的路线,以配合主动行动。 我会假设你已经做到了。 第二件事是,你想要的是不符合逻辑的。 你想作一个GET请求,并有两个相同的动作。 您现在正在使用基于HTTP方法,所谓的路由。 对于你的情况,我相信,所谓的基于动作的路由是最好的。

假设你有以下两个动作:

[HttpGet]
public IEnumerable<String> Active()
{
    var result = new List<string> { "active1", "active2" };
    return result;
}

[HttpGet]
public IEnumerable<string> Retrieve()
{
    return new[] { "value1", "value2" };
}

您路径应该是如下:

routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

然后,你可以要求那些具有下列的URI:

GET / controllername /检索

GET / controllername /主动



文章来源: How to bypass the exception multiple actions were found in ASP.NET Web API