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)
我正在使用这两种常规方法创建一个 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)