簡體   English   中英

MVC4操作發布參數錯誤500內部服務器錯誤

[英]MVC4 Action Post Parameters Error 500 Internal Server Error

我有一個帶有后期操作(多個參數)的控制器。 使用javascript ajax發布數據,我收到500 Internal Server Error 有什么建議嗎?

路由

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

阿賈克斯

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; }
    ...
}

我還沒有看到這樣聲明javascript對象的語法。 也許這可能是問題所在。 嘗試:

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

刪除您的()

另一個問題可能是由於ValidateAntiForgeryToken 此過濾器是為了防止CSRF,您必須將請求驗證令牌發送到服務器。 嘗試先刪除此過濾器,看看它是否有效。

這樣嘗試

  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; }
    ...
}

根據此鏈接發布參數,這是不可能的。 您可以在發布時將一個對象傳遞給動作構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM