2012-06-25 172 views
3

我想能如果路由約束失敗重定向,而不是隻返回一個404.這是該方案:路由約束重定向

  • 用戶點擊頁面www.test.com/preview/home/
  • 路由約束檢查他們是否可以預覽頁面
  • 如果沒有,重定向到www.foo.com/home/

這可能嗎?

回答

3

這是可能的,但沒有路由約束。路線約束不打算以這種方式使用。如果路線約束不滿足,則路線不匹配。如果你想執行一些授權和重定向,如果這個授權失敗,你最好寫一個自定義的授權屬性,並用它來裝飾你的控制器動作。

有以下兩種方式:

  1. 你想定製授權邏輯添加到現有的屬性。在這種情況下,您從AuthorizeAttribute派生並覆蓋AuthorizeCoreHandleUnauthorizedRequest方法來執行自定義授權和重定向(而不是導航到登錄頁面)(如果此邏輯失敗)。

  2. 您不想要任何基本功能。在這種情況下,您從FilterAttribute派生並實現IAuthorizationFilter接口,並將您的可視化和重定向邏輯放入OnAuthorization方法中。

下面是如何在授權邏輯使用,你必須到處訪問filterContext失敗重定向一個例子:

var values = new RouteValueDictionary(new 
{ 
    controller = "home", 
    action = "index" 
}); 
filterContext.Result = new RedirectToRouteResult(values);