- 问题 *
我正在创建一个ASP.NET MVC网站,正如标题所说,我试图用jquery向Web API控制器发送POST请求,但总是收到404错误。疯狂的是,在. NET Framework 4.5中,同样的事情可以工作,但在.NET Framework 4.6.2中,它真的不行。我在谷歌中找到了很多线程,解释了它可能出错的地方,但是这些都不管用。所以,下面是我的代码:
我的Web API控制器:
[Authorize]
public class CartController : ApiController
{
private ApplicationDbContext _context;
public CartController()
{
_context = new ApplicationDbContext();
}
[HttpPost]
public IHttpActionResult AddToCart(string productId)
{
if (!ModelState.IsValid || !ItemIsValid(productId))
return BadRequest();
var newCartItem = new ShoppingCartItem
{
ProductId = productId,
UserId = User.Identity.GetUserId()
};
_context.ShoppingCartItems.Add(newCartItem);
_context.SaveChanges();
return Ok();
}
private bool ItemIsValid(string productId)
{
return Enumerable.Any(_context.Products, contextproduct => contextproduct.Id.ToString() == productId && contextproduct.NumberAvailable > 0);
}
}
字符串
我的jQuery代码:
$(".buy-button").click(function() {
if (@User.Identity.IsAuthenticated.ToString().ToLower() === true) {
$.ajax({
url: "/api/cart",
method: "POST",
data: $(this).next().val()
}).done(function() {
alert("Product succesfully added to cart!");
});
} else {
window.location.href = "@Url.Action("Login", "Account")";
}
});
型
我的Global.asax代码:
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
型
我所尝试的
1)有些线程说Global.asax中的“调用”顺序很重要,所以我用各种可能的方法改变了RouteConfig.RegisterRoutes(RouteTable.Routes)
的位置。
2)在我的Web Api action([Route(“API/Cart/AddToCart”)])中添加了路由属性,我从经验中知道这是多余的,并相应地更改了我的jQuery代码。
3)我没有添加属性,而是直接将Routes添加到Web API Config中。
4)我还尝试直接用Postman
调用API(当然,我首先从Web API控制器中删除了Authorize属性)。
在这个问题上的任何帮助都是感激的。谢谢。
1条答案
按热度按时间6kkfgxo01#
我知道你谈到了改变路由配置,但我不知道细节,你有没有尝试Map到行动,以及像
字符串
然后在你的电话里
型
此外,如果您想发送productid,还有另一种方法可以将该值分配给按钮的data-rowId属性,如
HTML代码
型
然后在jquery中得到这个值,
型
并将其作为
型
假设您有一个item对象,并且它具有ProductID