我使用a通过$ ajax调用来调用API操作,但它似乎根本没有调用api,当单击该按钮时,就会出现失败消息。我错过了什么/做错了什么? 这是View和嵌入式ajax:
<a href="@Url.Action("SingleOrderView","Cailz", new{ ID = item.ID})">View</a> <a href="#" class="js-refuse-order" data-order-id="@item.ID">Refuse</a> </div> </div> </li> </ul> } @section scripts { <script> $(document).ready(function () { $(".js-refuse-order").click(function (e) { var link = $(e.target); if (confirm("Are you sure that you want to refuse this order?")) { $.ajax({ url: "/api/cailz/" + link.attr("data-order-id"), method: "POST" }) .done(function () { link.parents("li").fadeOut(function () { $(this).remove(); }); }) .fail(function () { alert("Something went wrong " + link.attr("data-order-id")) }); } }) }) </script>
以下是相关的API:
using CailzMk2.DataLayer;
using System.Linq;
using System.Web.Http;
using CailzMk2.Models;
namespace CailzMk2.API
{
[Authorize]
public class CailzController : ApiController
{
private ApplicationDbContext _context;
public CailzController()
{
_context = new ApplicationDbContext();
}
[HttpPost]
public IHttpActionResult Refuse(int id)
{
var refusedOrder = _context.Orders.Single(o => o.ID == id);
refusedOrder.OrderRefused = true;
_context.SaveChanges();
return Ok();
}
}
}
我一直在努力解决这个问题。
按下按钮调用该功能,确实输入了正确的ID。我能想到的只是找不到它。
这是一个路径Config,只是默认配置:
namespace CailzMk2
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}
答案 0 :(得分:0)
您的URL(在Ajax调用中)似乎不正确,因为它没有action组件。它应该是这样的:
url: "/api/Cailz/Refuse/" + link.attr("data-order-id"),
method: "POST"
此外,您应该在操作上使用[HttpPost]
而不是[HttpDelete]
来保持一致性。