我有一个带有后置动作的控制器(多个参数)。使用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; }
...
}
答案 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,这是不可能的。您可以在发布时将一个对象传递给动作构造函数。