首页新闻招聘找找看知识库

asp.net web api 下AllowAnonymous 特性不起作用问题。

0
悬赏园豆:5 [已解决问题] 解决于 2018-11-09 15:48

ConfigController 下的方法作用特性起作用。
/// <summary>
/// 获取app配置信息
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ConfigViewModel GetAppConfig()
{
var result = _client.Get("api/AppInfo/GetByAppId");
return new ConfigViewModel() { Logo = result.Data.Logo, CompanyName = result.Data.AppName };
}

UserController 下的方法 这个特性不起作用。
/// <summary>
/// 登录
/// </summary>
/// <param name="viewModel">登录实体</param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public UserViewModel Login([FromBody]LoginViewModel viewModel)
{
var result = _client.Post(viewModel, "api/SysUser/Login");
}

两个控制器继承同一个控制器

江宁织造的主页 江宁织造 | 初学一级 | 园豆:43
提问于:2018-11-08 18:30
< >
分享
最佳答案
0

你是怎么知道没起作用的?

收获园豆:5
dudu | 高人七级 |园豆:40895 | 2018-11-08 20:54

首先感谢站长亲在回答我的问题,有点受宠若惊。我这块有个认证的功能,我统一在baseContracl上家的授权特性,在config控制器上加允许匿名访问,调试发现它没去走认证的代码里面,但是登陆那块一点,就跑到认证里面去了。

江宁织造 | 园豆:43 (初学一级) | 2018-11-08 21:00

@江宁织造: 基类中是如何进行授权的?

dudu | 园豆:40895 (高人七级) | 2018-11-08 21:13

@dudu: 代码在公司电脑上,我现在只能简述授权干的几个事。
1.基类首先添加授权的特性,授权这块是重写授权特性。
2.重写授权方法

  1. 里面只是参考基本认证的方式、登陆后把用户名存到缓存中,顺便把生成后的加密Token返回到app端,然后app端之后请求的时候,把token放到请求头中,访问别的接口,授权重新方法根据token去解密,然后和缓存中对比。
    目前问题先不说我认证逻辑是否合理,问题是登陆的时候按道理不应该走授权。结果已登录就跑授权里面去了,app登陆前有一个获取配置的都是好着,反而登陆一直会执行到授权里面,一开始把方法名和控制器名都试着改了一下,发现还是会去执行授权。不知道哪里的问题。
江宁织造 | 园豆:43 (初学一级) | 2018-11-08 21:21

@江宁织造: 问题很奇怪,建议仔细检查一下代码

dudu | 园豆:40895 (高人七级) | 2018-11-08 21:35

@dudu: 问题解决了,问题果然出在授权那块去了,我忘了我是重写了授权方法,想当然的以为加了那个特性就能自动匿名访问了。没考虑重写授权方法后也要考虑控制器或者动作添加的匿名访问特性也要特殊处理。翻着asp.net mvc 的源码授权特性的时候才恍然大悟。

江宁织造 | 园豆:43 (初学一级) | 2018-11-09 15:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册