2013-01-17 186 views
1

我有一個路線:的Web API請求無效

routes.MapRoute (name: "apicontroller2", 
       url: "api/{controller}/{action}/", 
       defaults: new { controller = "Default2", action = "Index" } 
       ); 

和Default2Controller兩個崗位方法:

[HttpPost] 
public HttpResponseMessage Post(ttReview review) 
{ 
... 
} 

[HttpPost] 
public HttpResponseMessage PostPro(ttbewertungenpro pro) 
{ 
... 
} 

當我把這些API的方法通過webserver/api/default2/PostPro/webserver/api/default2/Post/阿賈克斯後我得到的錯誤:

ExceptionMessage=Multiple actions were found that match the request: 
System.Net.Http.HttpResponseMessage Post(WT.Models.ttReview) on type WT.Controllers.Default2Controller 
System.Net.Http.HttpResponseMessage PostPro(WT.Models.ttbewertungenpro) on type WT.Controllers.Default2Controller 

我的阿賈克斯電話是:

$.ajax({ 
     url: "../api/default2/Post", // or "../api/default2/PostPro", 
     type: 'POST', 
     dataType: "text", 
     data: review, // or pro 
     success: function (test) { 
     }, 
     error: function (test) { 
      alert("Error"); 
     } 
} 

是我的路線錯了還是什麼? 當我刪除一個方法的其他作品......

+1

/Default2 /的帖子會尋找Default2Controller,但你的控制器被命名爲DefaultController2。 – ryadavilli

+0

當您將'PostPro'重命名爲'Test'以擺脫普通前綴'Post'時會發生什麼? –

+0

沒有任何變化 – daniel

回答

1

隨着麩皮新的空白的WebAPI項目 - 我沒碰過Global.asax文件。

家庭控制器

[HttpPost] 
public HttpResponseMessage Post(string review) 
{ 
    return new HttpResponseMessage(HttpStatusCode.Created); 
} 

[HttpPost] 
public HttpResponseMessage PostPro(string pro) 
{ 
    return new HttpResponseMessage(HttpStatusCode.Created); 
} 

Index.cshtml

<script src="~/Scripts/jquery-1.7.1.js"></script> 

<script> 

    $(document).ready(function() { 

     $("#submit").click(function() { 

      $.ajax({ 
       url: "home/Post", // or "../api/default2/PostPro", 
       type: 'POST', 
       dataType: "text", 
       data: "test", // or pro 
       success: function(test) { 
       }, 
       error: function(test) { 
        alert("Error"); 
       } 
      }); 

     }); 

    }); 


</script> 


<input type="submit" value="submit" id="submit" /> 

這對我工作得很好,所以問題一定是你的路徑/路線。

2

退房AttributeRouting(http://nuget.org/packages/AttributeRouting.WebApi)

它容易得多,你的路線地圖。

[POST("Page/Method")] 
public HttpResponseMessage Post(ttReview review) 
{ 
... 
} 
+0

這解決了這個問題,但我仍然需要手動定義每個路由。這比解決最初的問題更適合解決問題。所以我不想將它標記爲答案。 – daniel

+0

至少如何投票? – Diginari