2013-08-20 71 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

相關問題