2012-10-04 41 views
0

我讀裏克Strahls張貼JObject到動作

http://www.west-wind.com/weblog/posts/2012/May/08/Passing-multiple-POST-parameters-to-Web-API-Controller-Methods

我想能夠使用JObject到的動作。 我寫了一個控制器,這樣

public class AlbumsController : Controller 
{ 
    [System.Web.Http.HttpPost] 
    public string PostAlbum(JObject jsonData) 
    { 
     return "success"; 
    } 
} 

前端看起來像這樣

當AJAX被稱爲我得到一個錯誤

 $("#a").click(function() { 
      var album = { 
       AlbumName: "PowerAge", 
       Entered: "1/1/1977" 
      } 
      $.ajax(
      { 
       url: "Albums/PostAlbum", 
       type: "POST", 
       contentType: "application/json", 
       data: JSON.stringify({ Album: album }), 
       success: function (result) { 
        alert(result.Result); 
       } 
      }); 
     }); 

POST http://localhost:50066/Albums/PostAlbum 500 (Internal Server Error) jQuery的1.7.1.js:8102 發送jquery-1.7.1.js:8102 jQuery.extend.ajax jquery-1.7.1.js:7580 (匿名函數)相冊:74 jQuery.event.dispatch jquery-1.7。 1.js:3256 elemData.handle.eventHandle

回答

4

你的控制器應ApiController獲得,而不是從Controller:如果您使用的是默認的路由設置

public class AlbumsController : ApiController 

另外:

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

我會建議你使用REST風格的動作名稱:

public class AlbumsController : ApiController 
{ 
    [HttpPost] 
    public string Post(JObject jsonData) 
    { 
     return "success"; 
    } 
} 

然後:

$('#a').click(function() { 
    var album = { 
     AlbumName: "PowerAge", 
     Entered: "1/1/1977" 
    } 
    $.ajax({ 
     url: 'api/albums', 
     type: 'POST', 
     contentType: 'application/json', 
     data: JSON.stringify({ Album: album }), 
      success: function (result) { 
       alert(result); 
      } 
     }); 
    }); 
    return false; 
});