MVC4操作发布参数错误500内部服务器错误

时间:2013-07-06 05:30:19

标签: c# ajax asp.net-mvc asp.net-mvc-4

我有一个带有后置动作的控制器(多个参数)。使用javascript ajax发布数据,我得到了500 Internal Server Error。有什么建议吗?

路由

    config.Routes.MapHttpRoute(
        null,
        routeTemplate: "api/{controller}/{action}"
    );

的Ajax

public register(data: any): bool {
    var url = this.baseUrl + "Account/Register/";
    var xhr: JQueryXHR = $.ajax({
        type: "POST",
        url: url,
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({
                 login: ({ Id: 0, "Username": "myUser", "Password": "myPass" }),
                 company: ({ Id: 0, "Name": "myCompany" })
              }),
        async: false,
        cache: false,
    });
    return (xhr.status == 200);
}

动作

[HttpPost]
[AllowAnonymous]
[Mvc.ValidateAntiForgeryToken]
public void Register(UserLogin login, Company company)

用户登陆

public class UserLogin
{
    public string Username { get; set; }
    public string Password { get; set; }
}

公司

public class Company
{
    public string Name { get; set; }
    public string Street { get; set; }
    ...
}

3 个答案:

答案 0 :(得分:2)

我还没有看到像这样声明javascript对象的语法。也许这可能是问题所在。尝试:

data: JSON.stringify({
                     login: { UserId : 0, Username: "myUser", Password: "myPass" },
                     company: { CompanyId : 0, Name: "myCompany" }
                  })

删除()

另一个问题可能是因为ValidateAntiForgeryToken。此过滤器用于防止CSRF,您必须将请求验证令牌发送到服务器。请先尝试删除此过滤器以查看其是否有效。

答案 1 :(得分:0)

试试这个

  public register(data: any): bool {
        var url = this.baseUrl + "Account/Register/";
        var xhr: JQueryXHR = $.ajax({
            type: "POST",
            url: url,
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({
                     login: ({ UserId : 0, Username: "myUser", Password: "myPass" }),
                     company: ({ CompanyId : 0, Name: "myCompany" })
                  }),
            async: false,
            cache: false,
        });
        return (xhr.status == 200);
    }

用户登陆

public class UserLogin
{
    public int UserId {get; set;}
    public string Username { get; set; }
    public string Password { get; set; }
}

公司

public class Company
{
    public int CompanyId {get; set;}
    public string Name { get; set; }
    public string Street { get; set; }
    ...
}

答案 2 :(得分:0)

根据此链接Posting parameters,这是不可能的。您可以在发布时将一个对象传递给动作构造函数。