在自定义AuthorizeAttribute中访问QueryString给他们token。所以他们提交了这样的请求:https://mysite.com/api/Ping?token=[issued-token]我有一个这样的ApiAuthorizeAttribute:得到;放;}publicoverridevoidOnAuthorization(System.Web.Http.Controllers.HttpActionContextactionContext){switch(Permission){caseApiPermission.None:return;caseApiPermission.Write:caseApiPermission.Read:stringquery=actionContext.Request.RequestUri.Query;varnvc=System.Web.HttpUtility.ParseQueryString(查询);stringtoken=nvc["token"];//(我的代码将令牌映射到请求的授权)ApiAuthorizationauth=ApiToken。获取授权(令牌);如果(auth!=null&&auth.HasPermission(Permission))返回;处理未授权请求(actionContext);返回;默认值:thrownewArgumentException("UnexpectedPermission");}}}然后我可以装饰我的API。注意:这只是一个示例,真正的调用将从其帐户中读取数据(帐户标识符在其令牌中加密)并返回。//////需要具有读取权限的令牌的Ping服务///返回“成功!”///[ApiAuthorize(Permission=ApiPermission.Read)][HttpGet]publicstringPing(){返回“成功!”;您可能会注意到,我无法从HttpActionContext参数访问QueryString并且必须自己构建它。看起来他们明确地从此Request对象中删除了QueryString。我不想将“令牌”添加到每个API方法以便在路由数据中获取它。所以我的问题是:QueryString是在某个地方,而我只是想念它吗?如果没有,微软为什么不包含这个Request对象有什么想法吗?(也许这可能是一件坏事?)是否有更好的方法来处理在AuthorizeAttribute中获取令牌(同样,无需将其添加到每次调用中)?顺便说一句,我意识到还有其他(可能更好)的授权选项,如基本身份验证和OAuth,我不想在这里讨论。虽然AdamTal的答案完美无缺,但在WebAPI新世界秩序中,您真的不想在System.Web命名空间中使用任何东西;事实上你甚至不想引用它。las,您可以从GetQueryNameValuePairs()扩展方法中获取查询字符串。这将让您切断System.Web锚点并仍然获得您需要的东西。varqueryString=actionContext.Request.GetQueryNameValuePairs().ToDictionary(x=>x.Key,x=>x.Value);试试上面的C#学习教程:访问自定义AuthorizeAttribute中QueryString分享的所有内容,如果对大家有帮助有用,需要多了解C#学习教程。希望大家多多关注——usingSystem.Web;HttpContext.Current.Request.QueryString本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
