2012-10-17 395 views
2

我已經搜索了一整天,但仍無法找到答案。我需要POST數據通過jQuery.postWeb API MVC-4但無法。這是我的路由:如何在asp.net web api中使用接收POST數據?

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

,這是我Controller(在GET作品!):

public string Get(int id) 
    { 
     return "value"; 
    } 

    public void Post([FromBody]string data) 
    { 
     //body... 
    } 

這是jQuery.post:

$.post('api/mycontroller', { key1: 'val1' }); 

任何想法?

編輯:

@Darin:我嘗試這樣做:

public class UnitDetails{ 
    public string id { get; set; } 
} 

和:

public void Post(UnitDetails id) { 
    //body... 
} 

和:

$.post('api/mycontroller', {id:'string1'}); 

但我仍想念的東西..它不停止在Post(...){...}。再次 - Get(...){...}確實工作..?

+0

API控制器有特殊路由,可以通過'MapHttpRoute'而不是'MapRoute'識別。默認情況下,它們是在App_Start/WebApiConfig.cs中定義的。這個路由配置是什麼樣的? –

回答

6

這是由設計並製作了原始類型這項工作如字符串的唯一途徑是:

$.post('/api/mycontroller', '=' + encodeURIComponent('val1')); 

所以POST請求的主體必須包含以下內容:

代替
=val1 

data=val1 

這已在this thread討論。

正如你可以定義一個視圖模型替代:

public class MyViewModel 
{ 
    public string Data { get; set; } 
} 

,然後讓你的控制器動作持這種觀點模型參數:

public void Post(MyViewModel model) 
{ 
    //body... 
} 

相反,基本類型,複雜類型使用格式化而不是模型綁定。這裏的an article涵蓋了Web API如何進行參數綁定。

+0

我嘗試了您的建議(請參閱上述問題的編輯),但沒有成功。 – Tar

+0

將您的動作參數重命名爲與「id」不同的內容。例如:'public void Post(UnitDetails details){...}'。 –

0

您發佈的內容爲api/mycontroller。 ASP.NET MVC會自動附加'Controller'提供的名稱,因此它正在尋找名爲mycontrollerController的控制器。您的帖子中未提及您的API控制器的名稱,但我懷疑這不是。

假設您的控制器被命名爲'myController',請嘗試發佈到api/my

$.post('api/my', { id: 'string1' }); 
相關問題