C# 动作故障的无止境循环解决方案 目标

C# 动作故障的无止境循环解决方案 目标,c#,asp.net-mvc-4,razor,C#,Asp.net Mvc 4,Razor,停止由动作生成的无限循环 问题 我有一个商店申请表。产品在类别上,可以标记为报价。左侧有一个菜单,列出我的应用程序的类别(如衣服、鞋子、帽子等)。此菜单的一项是提供,但提供不是一个类别,它只是一个标志。任何物品都可以在产品“类别”中,但鞋子不能在帽子中 如果我访问myapp.com/Category/Shoes/,则只会向我显示鞋子。如果我访问myapp.com/Category/Daily Offers/,今天的交易将显示给我,可以是鞋子、帽子和衣服 如您所见,在这两种情况下(鞋子或日常用品)

停止由动作生成的无限循环

问题 我有一个商店申请表。产品在类别上,可以标记为报价。左侧有一个菜单,列出我的应用程序的类别(如衣服、鞋子、帽子等)。此菜单的一项是
提供
,但
提供
不是一个类别,它只是一个标志。任何物品都可以在产品“类别”中,但鞋子不能在帽子中

如果我访问
myapp.com/Category/Shoes/
,则只会向我显示鞋子。如果我访问
myapp.com/Category/Daily Offers/
,今天的交易将显示给我,可以是鞋子、帽子和衣服

如您所见,在这两种情况下(鞋子或日常用品),用户都会遇到
类别
路线,但控制器不同。查看我的
应用程序\u Start>RouteConfig.cs

routes.MapRoute(
   name: "Categories",
   url: "Category/{categoryName}",
   defaults: new { controller = "Products", 
                   action = "Category", 
                   categoryName = UrlParameter.Optional 
                 }
);
现在,我的
产品控制器

[HttpGet]
public ActionResult Category(string categoryName = null)
{
    int? categoryId = 
       (categoryName != "Daily-Offers") ? 
       Convert.ToInt32(Regex.Match(categoryName, @"\d+").Value) : 
       (int?)null;

    if (categoryName == "Daily-Offers")
    {
        return RedirectToAction("DailyOffers", "Category");
    }
    else if (Regex.Match(categoryName, @"\d+").Success && String.Format("{0}-{1}",
             categoryId,
             CommodityHelpers.UppercaseFirst
             (CommodityHelpers.GenerateSlug
             (Categories.GetDetails((sbyte)categoryId).Category_Name))) 
             == categoryName)
    {
        [...]
        return View(Products.BuildListForHome(categoryId, null));
    }
    else
    {
        return View("404");
    }
}
[HttpGet]
public ActionResult DailyOffers()
{
    var productsList = Products.BuildOffersList();
    ViewBag.Title = String.Format("Today's deal ({0})", DateTime.Now);
    ViewBag.CategoryProductsQuantity = productsList.Count;
    ViewBag.CurrentCategory = "Daily-Offers";
    return View(productsList);
}
正如您所看到的,有一个“如果”,指出“每日提供”为正确的控制器

ProductsController
中的
DailyOffers
方法:

[HttpGet]
public ActionResult Category(string categoryName = null)
{
    int? categoryId = 
       (categoryName != "Daily-Offers") ? 
       Convert.ToInt32(Regex.Match(categoryName, @"\d+").Value) : 
       (int?)null;

    if (categoryName == "Daily-Offers")
    {
        return RedirectToAction("DailyOffers", "Category");
    }
    else if (Regex.Match(categoryName, @"\d+").Success && String.Format("{0}-{1}",
             categoryId,
             CommodityHelpers.UppercaseFirst
             (CommodityHelpers.GenerateSlug
             (Categories.GetDetails((sbyte)categoryId).Category_Name))) 
             == categoryName)
    {
        [...]
        return View(Products.BuildListForHome(categoryId, null));
    }
    else
    {
        return View("404");
    }
}
[HttpGet]
public ActionResult DailyOffers()
{
    var productsList = Products.BuildOffersList();
    ViewBag.Title = String.Format("Today's deal ({0})", DateTime.Now);
    ViewBag.CategoryProductsQuantity = productsList.Count;
    ViewBag.CurrentCategory = "Daily-Offers";
    return View(productsList);
}
最后,当我访问
myapp.com/Category/Daily Offers
时,响应是一个无休止的循环。是的,原因是合乎逻辑的,但如何防止这种情况?有人知道怎么解决吗

我已经试过了 我已经用以下方法装饰了
DailyOffers
”方法:

[ActionName("Daily-Offers")]
但没有成功——又是无休止的循环

强调
每日优惠不是一个类别-它是一个标志。应用程序将优惠视为一个类别,但在数据库中有一个名为
onSale
的产品列,告诉您某个项目是否是优惠。

您的路由表只知道
/category/{categoryName}
因此
/Category/Daily Offers
将影响您的
类别
操作

您可以在现有类别映射之上为“每日优惠”操作添加新映射:

routes.MapRoute(
   name: "DailyOffers",
   url: "Category/Daily-Offers",
   defaults: new { controller = "Products", 
                   action = "DailyOffers"
                 }
);

routes.MapRoute(
   name: "Categories",
   url: "Category/{categoryName}",
   defaults: new { controller = "Products", 
                   action = "Category", 
                   categoryName = UrlParameter.Optional 
                 }
);

您的路由表只知道
/Category/{categoryName}
所以
/Category/Daily Offers
将执行您的
类别
操作

您可以在现有类别映射之上为“每日优惠”操作添加新映射:

routes.MapRoute(
   name: "DailyOffers",
   url: "Category/Daily-Offers",
   defaults: new { controller = "Products", 
                   action = "DailyOffers"
                 }
);

routes.MapRoute(
   name: "Categories",
   url: "Category/{categoryName}",
   defaults: new { controller = "Products", 
                   action = "Category", 
                   categoryName = UrlParameter.Optional 
                 }
);

嗯。。。多简单的解决方案啊?一个明显的大问题用一个简单的解决方案解决了。谢谢,老兄,它能用+1毫米。。。多简单的解决方案啊?一个明显的大问题用一个简单的解决方案解决了。谢谢,老兄,它能用+1.