【问题标题】:BaseController input param Object results in Multiple actions were found that match the requestBaseController input param Object results in Multiple actions were found that match the request
【发布时间】:2013-08-20 21:52:58
【问题描述】:

我遇到了这种有趣的情况,我有一个用于 webApi 的 baseController 并已将问题追溯到这个问题。如果我有一个输入参数类型为 Object 的基本控制器,它将以 http 500 Multiple actions where found 结束...

这是在使用 IISExpress 的 vs 2012 的默认空 mvc 4.0 项目中

public class BaseSecureApi : ApiController
{
    public string Wtf(object ohMyGodThisIsSilly)
    {
        return null;
    }

}

还有控制器

public class Default1Controller : BaseSecureApi
{
    // GET api/default1
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // POST api/default1
    [HttpPost]
    public string Post([FromBody]string value)
    {

        return "Postmyvalue:" + value;
    }
}

还有一条路线

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

现在为什么路由会变得混乱。 IRL 基类根据谁登录以及结果是否应该加密返回一个 httpResponse。

【问题讨论】:

  • 我尝试使用发布的代码进行重现,但我没有得到你得到的结果。如果我将 Wtf 方法重命名为 GetWtf,我会得到相同的结果。
  • 您使用的是哪个环境@OlavNybø?刚刚检查了我的测试项目,它崩溃了。
  • 我在发帖时得到了和你一样的结果,我一开始只试过get。

标签: c# asp.net-web-api asp.net-web-api-routing


【解决方案1】:

来自 ASP.NET 网站上的routing-and-action-selection article:

HTTP 方法。框架只选择与请求的 HTTP 方法匹配的动作,确定如下:

  1. 您可以使用属性指定 HTTP 方法:AcceptVerbs、HttpDelete、HttpGet、HttpHead、HttpOptions、HttpPatch、HttpPost 或 HttpPut。
  2. 否则,如果控制器方法的名称以“Get”、“Post”、“Put”、“Delete”、“Head”、“Options”或“Patch”开头,则按照惯例,该操作支持HTTP 方法。
  3. 如果以上都不是,则该方法支持 POST。

这意味着 Wtf 方法将支持 POST,因为它是一个公共方法,没有属性并且不以任何常规词开头。

如果您将 Wtf 方法设置为受保护并且不会被 Web api 调用,您仍然可以在需要的地方从派生类的方法中调用它。

【讨论】:

  • 啊,我读了这篇文章,但错过了第 nr3 点……如果一切都失败了,它将支持 POST。有人应该因为那个 else/default 语句而受到严厉的打击。对于其他人来说,这可能会有所帮助。 blogs.msdn.com/b/webdev/archive/2013/04/04/… 。这是一个路由调试器。
猜你喜欢
  • 1970-01-01
  • 2017-01-19
  • 2021-09-28
  • 2022-12-02
  • 2022-12-27
  • 2021-04-28
  • 2019-08-20
  • 1970-01-01
  • 2014-04-17
相关资源
最近更新 更多