2016-09-14 66 views
1

我正在使用a通过$ ajax调用来调用API动作,但它似乎根本没有调用api,并且当单击该按钮时,失败信息刚刚出现。我错过了什么/做错了什么?
这里是查看并嵌入AJAX:为什么不是我的mvc 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会通过。我能想到的是它无法找到它。

这里是一个路由配置,只是默认配置:

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

你的URL(在Ajax调用)似乎是不正确的,因为它不具备行动的组成部分。它应该是这样的:

url: "/api/Cailz/Refuse/" + link.attr("data-order-id"), 
method: "POST" 

此外,你应该使用[HttpPost]行动上,而不是[HttpDelete]一致性。

+0

这是我在发布之前尝试的第一件事。我再次尝试,但仍然没有通过。 –

+0

你究竟做了什么:更改为[HttpPost]或更改URL? URL更重要,如果它没有触及你的动作,那么你需要检查路由是干什么的。我的答案假定相关路由是MVC项目创建时的默认值;即'api/{controller}/{action}/{id}' –

+0

是的,URL。我还检查了路由,它应该符合我使用的路由。我正在使用默认路由。 –

相关问题