将JObject发布到某个操作

eiu*_*165 0 asp.net-mvc json json.net

我在读Rick Strahls

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";
    } 
}
Run Code Online (Sandbox Code Playgroud)

前端看起来像这样

当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);
                }
            });
        });
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 5

您的控制器应该来自ApiController,而不是来自Controller:

public class AlbumsController : ApiController
Run Code Online (Sandbox Code Playgroud)

此外,如果您使用默认路由设置:

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

我建议你使用RESTful动作名称:

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

然后:

$('#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;
});
Run Code Online (Sandbox Code Playgroud)