2015-06-14 57 views
3

對不起,這個跛腳的問題。我已經閱讀過所有類似的問題,但仍無法解決我的問題。控制器上找不到與請求匹配的動作

我越來越從AJAX調用時錯誤 '沒有行動相匹配的請求的控制器上找到':

$.ajax({ 
     url: '/api/ToyEdit/Post/', 
     dataType: "json", 
     type: "POST", 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify({toyId: 1, toy: 'asd'}), 
    async: true, 
    processData: false, 
    cache: false, 
    success: function (data) { 
     alert(data); 
    }, 
    error: function (xhr) { 
     alert(xhr.statusText); 
    } 
}) 

控制器:

public class ToyEditController : ApiController 
{ 
    [System.Web.Mvc.HttpGet] 
    public EditToyViewModel Get(int? toyId) 
    { 
     var model = new EditToyViewModel(); 

     if (toyId.HasValue) 
     { 
      model.Toy = Data.GetToy(toyId.Value); 
     } 

     model.Companies = Data.GetCompanies().ToList(); 

     return model; 
    } 

    [System.Web.Mvc.HttpPost] 
    [System.Web.Mvc.ActionName("Post")] 
    public ActionResult Post(int? toyId, string toy) 
    { 
     var a = toy; 
     /*new Task<int>(() => DB.Context.Toys.FirstAsync().Id);*/ 

     return new EmptyResult(); 
    } 
} 

路由:

 routes.MapRoute(
      name: "WebApi", 
      url: "api/{controller}/{action}/{id}", 
      defaults: new { id = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

代碼有什麼問題?

更新1:

public class Toy 
{ 
    public int? toyId {get; set;} 
    public string toy {get; set;} 
} 

[System.Web.Mvc.HttpPost] 
[System.Web.Mvc.ActionName("Post")] 
public ActionResult Post(Toy toy) 
{ 
    // your necessary codes 
} 

但如何通過一些基本的增值經銷商:

OK,就當我使用下面的代碼工作?

+0

您的maproute與操作不匹配 – gypsyCoder

+1

Web API只能綁定來自HTTP主體的單個基本類型 – gypsyCoder

+0

但在不同的文章,如http://www.codeproject.com/Articles/795483/Do-GET-POST-PUT-DELETE-in-asp-net-MVC-with-Jquery他們使用多個變量。他們都錯了嗎? – LbISS

回答

2

嘗試如下: 首先,創建Toy

public class Toy 
{ 
    public int? toyId {get; set;} 
    public string toy {get; set;} 
} 

然後用它作爲下...

[System.Web.Mvc.HttpPost] 
[System.Web.Mvc.ActionName("Post")] 
public ActionResult Post(Toy toy) 
{ 
    // your necessary codes 
} 

你可以看看here更多信息...

+0

再一次,這並不能解釋他爲什麼會得到404。 – FrankerZ

+0

實際上,在web api中'route.MapRoutes'通過url模式映射...例如:「{控制器}/{動作}/{標識符}「映射控制器的動作,其中包含一個名爲'id'的參數 您可以在這裏查看 - http://www.asp.net/web-api/overview/web -api-routing-and-actions/routing-in-aspnet-web-api – gypsyCoder

+0

看來,當我使用你的代碼它的工作原理。但爲什麼我不能通過兩個原始變量? – LbISS

相關問題