Asp.net mvc 在AuthorizeAttribute中引用通用url参数

Asp.net mvc 在AuthorizeAttribute中引用通用url参数,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Routing,如果我的操作具有类似于/controller/action/{id}的路径,我可以通过执行httpContext.Request.RequestContext.RouteData.Values[“id”]在authorized属性中获取id 相反,如果它类似于/controller/action?id={id}我可以通过执行httpContext.Request.QueryString[“id”]来获得它 如果是来自帖子的表单数据,我还需要另一种方法 有没有一种方式可以说“无论路由是如何指定的,

如果我的操作具有类似于
/controller/action/{id}
的路径,我可以通过执行
httpContext.Request.RequestContext.RouteData.Values[“id”]
在authorized属性中获取
id

相反,如果它类似于
/controller/action?id={id}
我可以通过执行
httpContext.Request.QueryString[“id”]
来获得它

如果是来自帖子的表单数据,我还需要另一种方法

有没有一种方式可以说“无论路由是如何指定的,都可以在名为“id”的参数中输入什么?”

或者,如果您希望对获取和发布参数的权限有利于路由数据:

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

@Xodarap只是出于好奇,为什么你在动作过滤器中需要这个,比如
AuthorizeAttribute
?@bzlm:例如,我想确认有人正在编辑他们撰写的帖子。(所以我需要帖子ID)。@Xodarap看到了你的相关问题。对于动作过滤器来说,这是一个非常非典型的任务,因为过滤器在设计上不知道动作的细节(包括参数)。这通常会在需要授权的实际操作中实现,为什么不这样做呢?另外,如果你的过滤器确定你不是作者,它应该怎么做?重新使用返回视图?这真的是动作过滤器的工作吗?@bzlm:在动作中进行身份验证在缓存结果时动作甚至不会运行!是的,这是一个动作过滤器的工作,这就是为什么MVC框架设计师选择将它放在
AuthorizeAttribute
而不是
Controller
@Xodarap:
httpContext。Request[“Id”]
将从cookie、表单、查询字符串或服务器变量中获取对象。您应该将它括在parentsis()var Id=(Request.Params)中[“id”]?Request.RequestContext.routedData.Values[“id”])作为字符串;如果操作方法也用作childAction,并且
id
作为
routeValues
传递,该怎么办?
var id = Request.Params["id"] ?? Request.RequestContext.RouteData.Values["id"] as string;