首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ASP.NET AJAX POST 參數後台接收不到?contentType 與參數格式不匹配詳解

     編輯:程式設計綜合問答

問題代碼

// 前端
$.ajax({
    type: "POST",
    url: "addXZYW.aspx/SetBaoCun",
    data: "{id:'" + id + "',mc:'" + mc + "'...}", // 手動拼接 JSON 字符串
    contentType: "application/json; charset=utf-8",
    dataType: "json"
});

// 後台
[WebMethod]
public void SetBaoCun(string id, string mc, ...) { ... }

根本原因

contentType: "application/json" 告訴服務端請求體是 JSON,但 ASP.NET WebMethod 默認綁定器期望 application/x-www-form-urlencoded 或 multipart/form-data 格式,導致模型綁定失敗,參數全為 null。

修正方案(二選一)

方案一:前端改為標準表單編碼(推薦,簡單)

// 前端
$.ajax({
    type: "POST",
    url: "addXZYW.aspx/SetBaoCun",
    data: { id: id, mc: mc, engname: engname, shuruma: shuruma, tym: tym }, // 對象,jQuery 自動序列化為 form-urlencoded
    // contentType 默認即為 application/x-www-form-urlencoded
    dataType: "json"
});

// 後台無需改動,或改用 FormCollection
[WebMethod]
public void SetBaoCun(string id, string mc, ...) { ... }

方案二:前端保持 JSON,後台用 JSON 反序列化

// 前端保持原樣

// 後台
[WebMethod]
public void SetBaoCun(string json) { // 接收原始 JSON 字符串
    var obj = JsonConvert.DeserializeObject(json);
    // 使用 obj.Id, obj.Mc ...
}

public class ParamModel {
    public string Id { get; set; }
    public string Mc { get; set; }
    // ...
}

深度補充:WebMethod 參數綁定規則

  • application/x-www-form-urlencoded:自動映射同名參數(id=1&mc=test → string id, string mc)。
  • application/json:不支持 直接映射到多個 string 參數,只能接收單一對象參數或原始字符串。
  • 若必須用 JSON + 多參數,需自定義 HttpModule 或遷移至 ASP.NET Core / Web API。

安全警示

原代碼 SQL 拼接 string.Format("values({0},{1}...)", id, mc...) 存在嚴重 SQL 注入漏洞。務必使用參數化查詢:

string sql = "INSERT INTO zsk_yaopin(id,name,engname,shuruma1,commonname) VALUES(@id,@mc,@eng,@shu,@tym)";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@mc", mc);
// ...
cmd.ExecuteNonQuery();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved