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

时间:2015-11-28 20:19:32

标签: c# asp.net-mvc asp.net-mvc-4

我正在学习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 });

当我尝试访问烹饪控制器时,它会给我一个重定向循环错误。 谢谢

4 个答案:

答案 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

即可