【问题标题】:MVC4 Action Post Parameters Error 500 Internal Server ErrorMVC4 操作发布参数错误 500 内部服务器错误
【发布时间】:2013-07-04 05:07:03
【问题描述】:

我有一个带有后期操作(多个参数)的控制器。使用 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; }
    ...
}

【问题讨论】:

  • 第一个建议是检查调试器以获取比 500 错误更多的信息。其次,我认为您不想将数据作为字符串化 JSON 传递。此答案包含有关使用 XHR 传递 JSON 的更多信息:stackoverflow.com/questions/12446024/…
  • 已经尝试不使用 stringify。它应该以这种方式工作......也许与路由配置有关?
  • @Abc:查看我关于ValidateAntiForgeryToken 的更新答案,希望对您有所帮助
  • 我会的,谢谢你的提示

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    删除您的()

    另一个问题可能是因为ValidateAntiForgeryToken。此过滤器是为了防止 CSRF,您必须将 Request Verification Token 发送到服务器。请先尝试删除此过滤器,看看它是否有效。

    【讨论】:

      【解决方案3】:

      这样试试

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

      【讨论】:

      • 为什么 id 应该改变一些东西?不过还是感谢您的回答。
      猜你喜欢
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 2017-05-05
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      相关资源
      最近更新 更多