.Net Core是支持前后端不分離式的開發的,如果在原始系統中采用不分離式開發,后面需要在原系統中增加功能,并且新的服務采用其他語言開發,且系統原來功能保持原樣,這樣前端系統可以單獨調用新開發的接口。
但是,如果該系統涉及到權限控制,因為Net Core前后端不分離可以獲取到用戶的登錄信息,但是新的服務沒有此功能,無法獲取到用戶的權限信息,這時就需要通過Net Core轉調一次接口才行。
前端代碼如下
$.ajax({url: '/your/action',type: 'POST',contentType: 'application/json',data: JSON.stringify({ property1: 'value1', property2: 'value2' }),success: function(response) {console.log(response);}
});
1. 使用FromBody特性
這是最推薦的方式,適用于JSON格式的請求體:
[HttpPost]
public IActionResult YourAction([FromBody] YourModel model)
{// 直接使用model對象// 調用其他語言寫的接口return Ok();
}public class YourModel
{public string Name { get; set; }public int Age { get; set; }
}
2. 動態類型接收
如果不確定參數結構或想使用動態類型:
[HttpPost]
public IActionResult YourAction([FromBody] dynamic data)
{string value1 = data.property1;string value2 = data.property2;// 調用其他語言寫的接口return Ok();
}
3. 直接從Request.Body讀取
對于更復雜的場景,可以手動讀取請求體:
[HttpPost]
public async Task<IActionResult> YourAction()
{// 啟用緩沖(如果還沒有啟用)Request.EnableBuffering();// 獲取原始請求體Request.Body.Position = 0;using (var reader = new StreamReader(Request.Body)){// 獲取Body參數var body = await reader.ReadToEndAsync();// 調用其他語言寫的接口}return Ok();
}
4. 使用JObject解析
使用Newtonsoft.Json的JObject:
[HttpPost]
public IActionResult YourAction([FromBody] JObject data)
{var model = data.ToObject<YourModel>();// 或者直接訪問屬性var value = data["propertyName"].Value<string>();// 調用其他語言寫的接口return Ok();
}
注意事項
-
Content-Type頭:確保前端設置了正確的
Content-Type
(通常為application/json
) -
模型綁定:確保你的模型類屬性與前端發送的數據鍵名匹配
-
大小寫敏感性:默認情況下.NET Core使用駝峰命名解析,可以通過配置改變:
services.AddControllers().AddJsonOptions(options => {options.JsonSerializerOptions.PropertyNamingPolicy = null; // 保持原樣});
-
異步讀取:如果手動讀取Request.Body,請確保使用異步方法
-
啟用請求體緩沖:如果需要多次讀取請求體,需要啟用緩沖:
// 啟用緩沖(如果還沒有啟用)Request.EnableBuffering();// 獲取原始請求體,在讀取后總是重置 Request.Body.Position = 0,否則后續讀取會得到空內容Request.Body.Position = 0;