ASP.NET MVC重定向到操作重定向循环
本文关键字:重定向 操作 循环 ASP MVC NET | 更新日期: 2023-09-27 18:24:58
我正在学习asp.net MVC,我正在尝试重定向到操作,我尝试了以下代码,但我一直收到重定向循环错误。这是控制器类,我在其中得到错误
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 });
当我试图访问Cuisine控制器时,它会给我一个重定向循环错误。感谢
在routeConfig中,您为"cuisine/{name}
"定义了一个路由,它将被发送到Search操作方法。
在您的Search
操作方法中,您正在重定向到About
,即cuisine/About
。这与您定义的cuisine/{name}
路线匹配,因此它将再次向搜索操作发送请求。同样的进程将继续运行。这就是为什么你得到重定向循环
您应该删除您定义的这个特定路由,或者重命名用于cusine搜索的url模式,以防止重定向循环。
routes.MapRoute(name: "Cuisine",
url: "searchcuisine/{name}",
defaults: new { controller = "Cuisine", action = "Search",
name = UrlParameter.Optional });
这应该很明显:
routes.MapRoute(name: "Cuisine",
url: "cuisine/{name}",
defaults: new { controller = "Cuisine", action = "Search", name = UrlParameter.Optional })
表示所有以cuisine/
开头的URL都在CuisineController
上使用Search
方法。
/Cuisine/About
从该url开始,因此它将始终使用Search
方法。
看起来你想让{name}成为URL的一部分。你可以使用属性路由而不是更改默认路由,它至少没有这样的全局"破坏性"影响(在其他答案中解释),看起来它就是你真正想要的:)
[Route("Search/{name}")]
public ActionResult Search(string name)
{
return RedirectToAction("About", "Home");
}
请在此处查看有关属性路由的更多信息(若要实现此功能,请不要忘记添加routes.MapMvcAttributeRoutes()
(如果还没有))。
您需要恢复控制器操作模式。只需将url: "cuisine/{name}"
更改为url: "cuisine/{action}/{name}"