ASP.NET MVC 路由不适用于特定控制器

ASP.NET MVC Routing not working for a specific controller

我正在使用这两种常规方法创建一个 MVC 项目,但由于它不起作用,我决定处理该属性,起初它是有效的,但运行几次后它给了我 404,所以我试图恢复所有第一个有效的代码,但不幸的是它给了我 404。

RouteConfig.cs

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

            routes.MapRoute(
                name: "ReportsFilter",
                url: "{controller}/{action}/{filter}/{sdate}/{edate}",
                defaults: new { controller = "Reports", action = "GetReports", filter = UrlParameter.Optional, sdate = UrlParameter.Optional, edate = UrlParameter.Optional }
            );

            routes.MapRoute(
                name: "AddOrderProduct",
                url: "api/datatable/GetProducts/{OrderId}",
                defaults: new { controller = "Orders", action = "GetProducts", OrderId = UrlParameter.Optional }
            );
        }

OrdersController.cs

[HttpPost]
        [Route("api/datatable/OrderGetProduct/{OrderId}")]
        public ActionResult GetProducts(int OrderId)
        {
            db.Configuration.ProxyCreationEnabled = false;
            // Server Side Parameters
            int start = Convert.ToInt32(Request["start"]);
            int length = Convert.ToInt32(Request["length"]);
            var searchValue = Request.Form.GetValues("search[value]").FirstOrDefault();
            var sortColumn = Request.Form.GetValues("order[0][column]").FirstOrDefault();
            var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault();

            var orders = db.Order_product.Where(a => a.Order_id == OrderId).Select(b => b.Product_id);
            var dtList = db.Products1.Where(w => w.IsActive == true && !orders.Contains(w.Id)).Select(s => new {
                s.Name,
                Price = s.Base_price,
                ProductId = s.Id
            }).ToList();
            int totalRows = dtList.Count();

            // Filter
            if (!string.IsNullOrEmpty(searchValue))
            {
                dtList = dtList.Where(x => x.Name.ToLower().Contains(searchValue.ToLower())
                || x.Price.ToString().Contains(searchValue)
                ).ToList();
            }
            int totalRowsFilter = dtList.Count();

            // Sorting
            if (!(string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnDir)))
            {
                switch (sortColumn)
                {
                    case "0":
                        if (sortColumnDir.ToLower() == "asc")
                        {
                            dtList = dtList.OrderBy(x => x.Name).ToList();
                        }
                        else
                        {
                            dtList = dtList.OrderByDescending(x => x.Name).ToList();
                        }
                        break;
                    case "1":
                        if (sortColumnDir.ToLower() == "asc")
                        {
                            dtList = dtList.OrderBy(x => x.Price).ToList();
                        }
                        else
                        {
                            dtList = dtList.OrderByDescending(x => x.Price).ToList();
                        }
                        break;

                }
            }

            // Paging
            dtList = dtList.Skip(start).Take(length).ToList();

            return Json(new { data = dtList, draw = Request["draw"], recordsTotal = totalRows, recordsFiltered = totalRowsFilter }, JsonRequestBehavior.AllowGet);
        }

运行 URL : http://localhost:57848/api/datatable/OrderGetProduct/1

只是给我错误 404。我已经尝试了此处发布的所有解决方案,但仍然出现 404。请帮忙。在 ASP.NET MVC 上欣赏它的新功能。

在路由属性中,必须在路由的开头添加正斜杠,以表明路由从根开始,否则路由将添加到此控制器的默认路由的末尾

          [HttpPost]
        [Route("~/api/datatable/OrderGetProduct/{OrderId}")]
        public ActionResult GetProducts(int OrderId)