2011-03-07 70 views
2

如果我的操作具有類似/controller/action/{id}的路徑,我可以通過執行httpContext.Request.RequestContext.RouteData.Values["id"]在AuthorizeAttribute中獲取idAuthorizeAttribute中的參考通用url參數

相反,如果它是像/controller/action?id={id}這樣的東西,我可以通過做httpContext.Request.QueryString["id"]得到它。

如果是來自POST的表單數據,我還需要其他方法。

有沒有一種方法可以說:「無論指定路由如何,都可以通過名稱'id'獲取參數?」

+0

@Xodarap只是出於好奇,爲什麼你需要這一個動作過濾器,如'AuthorizeAttribute '? – bzlm 2011-03-07 21:43:11

+0

@bzlm:例如我想驗證某人正在編輯他們撰寫的帖子。 (所以我需要帖子ID)。 – Xodarap 2011-03-07 21:46:18

+0

@Xodarap看到你的相關問題。對於動作過濾器來說,這是非常非常規的任務,因爲過濾器在設計上並不會忽視動作的細節(包括參數)。這通常會在需要授權的實際操作中執行,爲什麼不這樣做呢?另外,如果你的過濾器確定你不是作者,它應該怎麼做?重定向?返回一個視圖?這真的是一個動作過濾器的工作嗎? – bzlm 2011-03-07 21:51:44

回答

6
var id = Request.RequestContext.RouteData.Values["id"] ?? Request.Params["id"] as string; 

,或者如果你想特權贊成路由數據的GET和POST參數:

var id = Request.Params["id"] ?? Request.RequestContext.RouteData.Values["id"] as string; 
+0

你應該把字符串作爲字符串包含進parentesis() var id =(Request.Params [「id」] ?? Request.RequestContext.RouteData.Values [「id」])。 – 2013-03-25 19:23:29

+0

如果action方法也用作childAction,並且'id'作爲'routeValues'傳遞,該怎麼辦? – dotNETbeginner 2013-11-16 11:39:50