加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何绕过ASP.NET Web API中发现的多个操作的异常

发布时间:2020-12-16 06:47:44 所属栏目:asp.Net 来源:网络整理
导读:在尝试为以下问题找到解决方案时: MVC Web Api Route with default action not working 大多数情况下,我遇到了“发现多个动作”的问题.如果路由机制发现多个与路由匹配的操作,则会抛出异常500. 例如,ValuesController中有两个操作: [HttpGet]public IEnume
在尝试为以下问题找到解决方案时:

MVC Web Api Route with default action not working

大多数情况下,我遇到了“发现多个动作”的问题.如果路由机制发现多个与路由匹配的操作,则会抛出异常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:Mike的评论更新,似乎问题不正确,所以我通过不提及路由约束来改变问题的方式.

谢谢

解决方法

首先,除非您对其应用HttpGet属性,否则这些路径不应该与Active动作匹配.我会假设你已经这样做了.第二件事是你想要的不合逻辑.您想提出获取请求并执行两个相同的操作.您现在正在使用所谓的基于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/retrieve

GET /controllername/active

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读