我正在嘗試使用 Ajax 發布到我的 Web API,但由于某種原因,我的代碼中只有一個路由在客戶端不起作用。它在 Swagger 上運行得非常好。這是我的 ASP.NET 代碼片段:
app.MapGet("/clients", GetClients);
app.MapGet("/client/{clientID}", GetClient);
app.MapPost("/clients", CreateClient);
app.MapGet("/transactions/{clientID}", GetTransactions);
app.MapGet("/transactiontypes", GetTransactionTypes);
//app.MapPost("/transactions", CreateTransaction);
//The below route gives 404 error from client app:
app.MapPost("/transactions/{transactionID}", UpdateCommentTransaction);
public static async Task<IResult> UpdateCommentTransaction(ITransactionData transactionData, int transactionID, int clientID = 1, string updatedComment = "Test")
{
try
{
await transactionData.UpdateCommentTransaction(clientID, transactionID, updatedComment);
return Results.Ok();
}
catch (Exception ex)
{
return Results.Problem(ex.Message);
}
}
我的阿賈克斯電話:
$(".submit-comment-update").on("click", function(){
$.ajax({
url: "https://localhost:7165/transactions",
type: "POST",
data: JSON.stringify({transactionID : 50011}),
contentType: "application/json",
success: function()
{
alert("Successfully updated comment!");
},
complete: function()
{
console.log("Completed");
},
error: function (request, status, error)
{
alert("Update failed!");
}
});
});
我收到 404 錯誤。可能是什么問題呢?
uj5u.com熱心網友回復:
你得到一個 404 not found 因為你沒有定義任何可以匹配 url 的路由:“https://localhost:7165/transactions”
在路由定義中,您希望將 transactionID 作為路由的一部分
app.MapPost("/transactions/{transactionID}", UpdateCommentTransaction);
例如 /transactions/50011
但是,在您的 Ajax 呼叫中,您不會在 url 中傳遞 50011,而是在有效負載中傳遞。
您的 ajax 呼叫應該是:
$(".submit-comment-update").on("click", function(){
$.ajax({
url: "https://localhost:7165/transactions/50011",
type: "POST",
contentType: "application/json",
success: function()
{
alert("Successfully updated comment!");
},
complete: function()
{
console.log("Completed");
},
error: function (request, status, error)
{
alert("Update failed!");
}
});
});
請注意,您當然需要后端來處理您的資料不在有效負載中而是在 url 中的事實。
uj5u.com熱心網友回復:
你的終點應該是,
"https://localhost:7165/transactions/" transcationID
請求正文(有效負載)應該是這樣的
// data transfer object
var DTO = {
transactionData: { // of type ITransactionData
// properties here
},
transactionID: 50011,
clientID: 1, //optional
updatedComment: "Test" // optional
};
//..
$.ajax({
url: "https://localhost:7165/transactions/" 50011,
type: "POST",
data: JSON.stringify(DTO),
contentType: "application/json",
//...
});
根據方法簽名
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488916.html
標籤:jQuery 阿贾克斯 asp.net-web-api
