【问题标题】:web api route error - multiple actions were foundweb api 路由错误 - 发现多个操作
【发布时间】:2013-07-11 15:30:55
【问题描述】:

我知道有很多这样的问题,但我似乎无法弄清楚为什么我在调用 PostEmailTemplate 操作时收到“找到与请求匹配的多个操作:”错误。这些是操作方法:

(删除旧代码)

更新 2:我删除了所有方法,将路由设置回默认路由,并保留默认控制器接口。 2 'get' 方法有效,但 Post 仍然给出该错误。 现在是控制器:

    public EmailTemplateModel Get(int id)
    public  List<EmailTemplateName> Get()
    public void Post([FromBody]EmailTemplateModel data)

这是唯一的路线:

           RouteTable.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = System.Web.Http.RouteParameter.Optional }
            );

【问题讨论】:

    标签: asp.net-web-api routes


    【解决方案1】:

    为了测试您的配置,我创建了一个快速项目,尽管我很确定您已正确实施它。在我的项目中一切正常,我可以 POST 到控制器并获得正确的响应等。

    您确定正确发送请求吗?因为http://&lt;host&gt;:&lt;port&gt;/api/&lt;controller&gt; 应该是您发送 POST 的地址。 URI 中不需要额外的操作,因为只有一种 POST 方法。框架应该选择该方法并自动使用该方法。显然,只有当实际有两个或多个 POST 方法时才会出现“多个操作”错误。

    您可以尝试的最后一个方法是明确提及方法所属的请求类型。这可以通过将属性[HttpGet][HttpPost][HttpDelete] 等添加到该特定方法来完成。因此,在您的情况下,将 [HttpGet] 添加到两个 GET 方法,并将 [HttpPost] 添加到 POST 方法。我很好奇它在这种情况下是否会起作用。

    【讨论】:

    • HttpPost 属性给出了同样的错误。如果我将参数更改为字符串而不是自定义类型,它会起作用。这里是我如何调用 web api: $.ajax({ url: "/api/emailtemplate/", type: 'POST', data: ko.toJSON(self), contentType: 'application/json',
    • 奇怪,好像没什么问题。你能用更多代码更新你的初始问题吗?特别包括public class 等,您能否提供Get 方法返回的JSON 示例代码?
    猜你喜欢
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 2017-12-23
    • 2018-07-06
    • 1970-01-01
    • 2013-03-20
    • 2017-09-27
    • 2020-04-10
    相关资源
    最近更新 更多