I am trying to POST to my web API using Ajax, but for some reason, only one route in my code does not work from the client. It works perfectly fine from Swagger. Here is my ASP.NET code snippet:
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);
}
}
My Ajax call:
$(".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!");
}
});
});
I get a 404 error. What could be the problem?
2
Answers
You are getting a 404 not found as you haven’t defined any route that could match url: "https://localhost:7165/transactions"
In the route definition, you expect to have the transactionID as part of the route
For instance /transactions/50011
However, in your Ajax call you don’t pass the 50011 in the url but in the payload.
Your ajax call should be:
Be careful, you will of course need your backend to handle the fact that your data will not be in the payload but the url.
Your end point should be,
The request body(payload) should be something like this
according to the method signature