.NET Core WebAPI post參數傳遞時后端的接收方式
- 實體類
- dynamic動態類型
- JObject參數(推薦)
- 單值參數(字符串參數)
A.前端Post請求代碼
$.ajax({
url: "/api/student/poststudent", type: 'POST', data:JSON.stringify({ name: "張三", age: 21 }), success:function () { }, dataType: "json", contentType: "application/json" });
B.后端接收參數方式
1. 實體類
實體類是比較簡單的一種傳參方式,使用頻率非常高。
- 添加實體類
public class Student { public string Name { get; set; } public int Age { get; set; } }
- 后台處理Post請求代碼
[HttpPost("{id}")] public void PostStudent([FromBody] Student student) { }
- 接收參數結果
2.dynamic動態類型
- 后台處理Post請求代碼
[HttpPost("{id}")] public void PostStudent(dynamic student) { var name = student.name;//name大小寫與前端參數一致 var age = student.age; }
- 接收參數結果
3.JObject參數(推薦)
JObject傳參方式是個人比較推薦的一種方式,前台請求傳參寫法不具迷惑性,后台接收也較為靈活
- 引入Microsoft.AspNetCore.Mvc.NewtonsoftJson包
- 添加引用
using Newtonsoft.Json.Linq;
- 后台處理Post請求代碼
- 3.0以后需要為Controllers添加NewtonsoftJson注冊(services.AddControllers() .AddNewtonsoftJson();)
[HttpPost("{id}")] public void PostStudent([FromBody] JObject student) { }
- 接收參數結果
4.單值參數(字符串參數)
只能傳一個字符串參數,並且用單引號包一個雙引號,雙引號里為字符串內容!
- 前端代碼與以上方式不同
$.ajax({
url: "/api/student/poststudent", type: 'POST', data:'"name=張三,age=21"',//這里是重點!用單引號包一個雙引號,雙引號里為字符串內容! success:function () { }, dataType: "json", contentType: "application/json" });
- 后台處理Post請求代碼
[HttpPost("{id}")] public void PostStudent([FromBody] string values) { }
WebApi 方法參數前加[FromBody]標識,表示該參數值應該從請求的Body中獲取,而不是從URL中獲取。不加[FromBody]標識后台取不到參數值。
- 接收參數結果
設置允許跨域
如果有跨域需求支持,請設置允許跨域。在Stateup.cs中添加如下代碼。
- 修改ConfigureServices方法,添加代碼如下:
//允許一個或多個來源可以跨域 services.AddCors(options => { options.AddPolicy("CustomCorsPolicy", policy => { // 設定允許跨域的來源,有多個可以用','隔開 policy.WithOrigins("https://localhost:5000")//只允許https://localhost:5000來源允許跨域 .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); });
//配置跨域處理,允許所有來源
services.AddCors(options =>
{
options.AddPolicy("cors", policy =>
{
policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin();
});
});
- 修改Configure方法,添加代碼如下:
app.UseCors("CustomCorsPolicy");