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控制器时,它会给我一个重定向循环错误。感谢

ASP.NET MVC重定向到操作重定向循环

在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}"