2015-02-17 117 views
0

有一堆類似的問題,但沒有一個答案工作。我試着返回'RedirectToAction(「Index」);'當用戶未被授權創建新窗口小部件時,它與'public ActionResult Create()'位於同一控制器中。我沒有其他名稱爲Index的文件夾,但其他控制器中還有其他'Public ActionResults Index()'功能。任何建議將不勝感激......謝謝MVC返回RedirectToAction(「索引」)拋出HTTP錯誤403.14 - 禁止

+1

顯示您的完整代碼。你確定你正在引用你想重定向到的CORRECT控制器嗎? – 2015-02-17 21:47:22

+0

運行提琴手並查看瀏覽器和服務器交換的請求和響應。如果你無法理解它們,請在這裏發帖 – 2015-02-17 21:50:11

+0

聲音給我,就像你在你的控制器的頂部有一個'AuthorizeAttribute'。做'Index'也需要授權 - 所以重定向到毫無意義。你需要展示一些代碼。 – 2015-02-17 21:50:24

回答

0

我試圖複製你的場景無濟於事。 帶有一個Test控制器的新MVC5項目在兩個操作上都嘗試了兩個Authorize屬性只是爲了測試,但如果您沒有權限查看資源,他們所做的全部實際上都會將您重定向到登錄頁面。

HTTP 403.14是拒絕目錄列表的代碼。 在我看來,你正在重定向到一個沒有被MVC處理的URL,而是被你的IIS express選中,默認情況下它不允許列出目錄內容。

所以需要考慮的問題是: 1:您打電話的具體URL是什麼。 2:你的路由設置如何,你有任何自定義路由嗎?路線順序很重要。

爲了能夠爲您提供更多的信息,請張貼控制器代碼以及您的RouteConfig.cs文件。

這裏是測試代碼。

public class TestController : Controller 
{ 
    // GET: Test 
     [Authorize] // just redirects back to login page if you call create action. 
    public ActionResult Index() 
    { 
     return View(); 
    } 


    // GET: Test/Create 
    public ActionResult Create() 
    { 
     return RedirectToAction("Index"); 
    } 

}

這裏是路由配置文件。不變。

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 
+1

你是正確的請求URL http:// localhost:50166/Content /,是錯誤的。通過改變RedirectToAction(「Index」);到RedirectToAction(「/ Index」);該請求被重定向到http:// localhost:50166/ContentController /,這是正確的URL。再次感謝您花時間在此。 – Topher 2015-02-18 17:35:11