想請問各位大大
我用asp.net framework web api寫了一支測試api
但是當我用ajax去呼叫後端一直收到不值 一直是null 參考了很多stackoverflow文章都無法有效的解決
想請問各位這應該是哪裡寫錯了呢
[RoutePrefix("api/Test")]
public class TestController : ApiController
{
[HttpPost]
[Route("Book")]
public string Book([FromBody] string test)
{
return test;
}
}
<script>
$.ajax({
url: "/api/Test/Book",
method:"POST",
contentType: "application/json",
data: JSON.stringify({ "test": "test123" }),
beforeSend: function () {
//
},
complete: function () {
//
}
}).done(function (data) {
console.log("成功取得" + data);
}).fail(function (jqXHR, textStatus) {
console.log("發生錯誤: " + textStatus);
})
我不確定對不對~
但我認為這邊參數名稱應該要相同,你可以試試
var test=JSON.stringify({ "test": "test123" });
$.ajax({
url: "/api/Test/Book",
method:"POST",
contentType: "application/json",
data: test,
beforeSend: function () {
//
},
complete: function () {
//
}
}).done(function (data) {
console.log("成功取得" + data);
}).fail(function (jqXHR, textStatus) {
console.log("發生錯誤: " + textStatus);
})
我都用 $.post 不要直接用底層的 $.ajax
直接 data:{}不用stringify啦
function GetAutoComplete(t) {
$.post({
url: './',
dataType: 'json',
data: {
action: "getAutoComplete",
value: $("#tbName").val()
}
})
.done(function(data) {
if (data !== null && data.length > 0) {
acKeyword = data;
$("#tbName").autocomplete("option", { source: acKeyword });
}
});
}
[FromBody] 本身解析方式比較特別,專門解析複雜型態的,如果要帶參數還是盡量使用 model,
前端直接帶字串應該就能有資料,附上POSTMAN測試,這樣傳遞限制很大只有一個參數,微軟參考文件也會附上
body是存字串的話推薦可以用object
接
這種寫法比較不會有打不到api的狀況
[RoutePrefix("api/Test")]
public class TestController : ApiController
{
[HttpPost]
[Route("Book")]
public string Book(object test)
{
return test;
}
}