我正在学习asp.net MVC,我正在尝试重定向到操作,我尝试了以下代码,并且我不断获得重定向循环错误。 这是我收到错误的Controller类
public class CuisineController : Controller
{
// GET: Cuisine
public ActionResult Search(string name)
{
return RedirectToAction("About","Cuisine");
}
public ActionResult Index()
{
return Content("This is Index");
}
public ActionResult About()
{
return Content("this is About");
}
}
除了默认路线
之外,我还创建了自己的路线 routes.MapRoute(name: "Cuisine",
url: "cuisine/{name}",
defaults: new { controller = "Cuisine", action = "Search", name = UrlParameter.Optional });
当我尝试访问烹饪控制器时,它会给我一个重定向循环错误。 谢谢
答案 0 :(得分:2)
在您的routeConfig中,您有一个为" cuisine/{name}
"定义的路线;它将被发送到搜索操作方法。
在Search
操作方法中,您正在重定向到About
,即cuisine/About
。这与您定义的路由cuisine/{name}
匹配,因此它会再次向搜索操作发送请求。同样的过程将继续运行。这就是你获得重定向循环的原因
您应该删除您定义的这个特定路由,或重命名网址搜索的url模式以防止重定向循环。
routes.MapRoute(name: "Cuisine",
url: "searchcuisine/{name}",
defaults: new { controller = "Cuisine", action = "Search",
name = UrlParameter.Optional });
答案 1 :(得分:2)
这应该是非常明显的:
routes.MapRoute(name: "Cuisine",
url: "cuisine/{name}",
defaults: new { controller = "Cuisine", action = "Search", name = UrlParameter.Optional })
以cuisine/
开头的所有网址都使用Search
上的CuisineController
方法。
/Cuisine/About
以该网址开头,因此始终使用Search
方法。
答案 2 :(得分:0)
看起来你想让{name}成为URL的一部分。您可以使用属性路由而不是更改默认路由,它至少没有这种全局“破坏性”效果(在其他答案中解释),并且看起来就是您实际上的目标:)
[Route("Search/{name}")]
public ActionResult Search(string name)
{
return RedirectToAction("About", "Home");
}
详细了解属性路由here(为此,请不要忘记添加routes.MapMvcAttributeRoutes()
(如果尚未添加)。
答案 3 :(得分:0)
您需要恢复控制器操作模式。只需将url: "cuisine/{action}/{name}"
更改为ID|MONTH|DAY1|DAY2|DAY3|DAY4|..........|DAY31
1 | 4 | 10 | 20 | 0 | 15 |..........|10
2 | 4 | 20 | 30 | 23 | 7 |..........| 5
1 | 5 | 5 | 10 | 20 | 4 |..........| 20
1 | 6 | 12 | 0 | 10 | 5 |..........| 10
2 | 6 | 10 | 10 | 5 | 10 |..........| 5