2016-09-14 65 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。我還檢查了路由,它應該符合我使用的路由。我正在使用默認路由。 –

相關問題