【发布时间】:2015-08-30 03:59:04
【问题描述】:
抱歉这个蹩脚的问题。我已经阅读了所有类似的问题,但仍然无法解决我的问题。
从 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
}
但是如何传递一些原始变量呢?
【问题讨论】:
-
您的地图路线与操作不匹配
-
Web API 只能绑定来自 HTTP 正文的单个原始类型
-
但是在 codeproject.com/Articles/795483/… 这样的不同文章中,他们使用了多个变量。他们都错了吗?
-
你使用的是web api,在文章中,使用的是MVC...
-
@LblSS 请看一下 - weblog.west-wind.com/posts/2012/Sep/11/…
标签: c# asp.net ajax asp.net-mvc routing