2015-11-28 106 views
1

我正在學習asp.net MVC,我試圖重定向到行動,我試着下面的代碼,我不斷收到重定向循環錯誤。 這是控制器類中,我得到一個錯誤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 }); 

路線當我嘗試訪問烹飪控制器,它給我一個重定向循環錯誤。 謝謝

回答

2

在您的routeConfig中,您有一條爲「cuisine/{name}」定義的路線,它將被髮送到搜索操作方法。

在您的Search操作方法中,您將重定向到About,即cuisine/About。這與您定義的路線cuisine/{name}相匹配,因此它會再次將請求發送到搜索操作。相同的過程將繼續運行。這就是爲什麼你會得到重定向循環的原因

你應該刪除你定義的這個特定的路由或重命名cusine搜索的url模式以防止重定向循環。

routes.MapRoute(name: "Cuisine", 
      url: "searchcuisine/{name}", 
      defaults: new { controller = "Cuisine", action = "Search", 
                  name = UrlParameter.Optional }); 
2

這應該是很明顯的:

routes.MapRoute(name: "Cuisine", 
url: "cuisine/{name}", 
defaults: new { controller = "Cuisine", action = "Search", name = UrlParameter.Optional }) 

所有訪問以cuisine/開始使用Search方法上CuisineController

/Cuisine/About以該網址開頭,因此它總是使用Search方法

0

看起來你想讓{name}成爲URL的一部分。您可以使用屬性的路由,而不是改變默認的路由,它不具備這樣的全球性的「破壞性」的影響,至少(在其他的答案解釋),看起來這是你究竟是什麼之後:)

[Route("Search/{name}")] 
public ActionResult Search(string name) 
{ 
    return RedirectToAction("About", "Home"); 
} 

查看更多有關屬性路由here(爲了這個工作,如果它不存在,不要忘記添加routes.MapMvcAttributeRoutes())。

0

您需要恢復控制器操作模式。只需將url: "cuisine/{name}"更改爲url: "cuisine/{action}/{name}"