【发布时间】:2015-07-22 21:02:43
【问题描述】:
假设我有一个具有两个操作的控制器,RouteOne (GET) 和 RouteTwo (POST)。我还注册了默认路由,所以如果控制器是 HomeController,我应该能够通过在浏览器中访问此 URL 来访问控制器:
回家/RouteOne
问题:给定一个 URL 和一个 HTTP 动词,我如何获得对我试图运行的控制器操作的 MethodInfo 的引用?这包括使用查询字符串参数的操作。
示例:HomeController 内部的此操作:
[HttpGet] public ActionResult AnAction(string param1, int param2) {}
应该使用 GET 的 HTTP 动词和以下的 URL 解析:
首页/AnAction?param1=asdf¶m2=1234
最终目标是确定某人是否有权访问给定的 URL,使用 AuthorizeAttribute 提供角色信息。如果有其他方法可以确定这一点,我会全力以赴。
【问题讨论】:
-
为什么需要methodinfo来告诉你?您是否尝试对 Authorize 属性进行单元测试?
-
您是否尝试在客户端确定权限?当服务器拒绝他们的请求时,用户可以告诉他们没有访问权限。让您的 api 返回 403 禁止代码。
-
这已经通过属性内置了,但是如果您试图隐藏链接,最好设置用户拥有和不拥有的权限,将它们存储为声明(在用户身份对象中),然后在 UI 中检查声明。
标签: c# asp.net asp.net-mvc asp.net-web-api