2013-08-20 17 views
0

我有这种有利的情况,我有一个用于webApi的baseController,并且已经将问题跟踪到这一点。如果我有了一个输入参数类型对象,其中发现它最终会以http 500多个操作的基本控制器...BaseController输入参数对象结果发现与请求匹配的多个操作

而且这是在默认情况下使用IISExpress

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

} 
对VS 2012的空MVC 4.0项目

并且,控制器

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。

+0

我试图重现使用发布的代码,但我没有得到你得到的结果。如果我将Wtf方法重命名为GetWtf,我会得到相同的结果。 –

+0

您使用的是@OlavNybø的哪个环境?刚刚检查了我的测试项目,它崩溃了。 – Archlight

+0

我得到的结果与您发布时的结果相同,我最初只尝试过。 –

回答

1

routing-and-action-selection article在ASP.NET网站:

HTTP方法。

  1. 可以指定与属性的HTTP方法:AcceptVerbs,HttpDelete,HTTPGET,HttpHead,HttpOptions,HttpPatch,HttpPost,或HttpPut框架仅如下选择确定匹配请求的HTTP方法,其动作, 。
  2. 否则,如果控制器方法的名称以“Get”,“Post”,“Put”,“Delete”,“Head”,“Options”或“Patch”开头,那么按照约定, HTTP方法。
  3. 如果以上都不是,则该方法支持POST。

这意味着,世跆联方法支持POST,因为它是一个公共方法,没有属性,它不与任何传统的话开始。

如果您使Wtf方法受到保护并且不会被Web API调用,您仍然可以从您需要的派生类的方法调用它。

+0

有想过。但为什么它这样做? – Archlight

+0

啊我读了文章但错过了点nr3 ...如果一切都失败了,它将支持POST。有人应该在其他/默认声明中严重摔坏。对于其他人来说这可能会有帮助http://blogs.msdn.com/b/webdev/archive/2013/04/04/debugging-asp-net-web-api-with-route-debugger.aspx。 这是一个路由调试器。 – Archlight

相关问题