我正在尝试确定如何在表单身份验证下配置对 Web API 控制器服务的访问。如果我通过添加授权元素添加授权配置以拒绝所有匿名用户:
<authorization>
<!-- 拒绝所有匿名用户 -->
<deny users="?" />
</授权>
只能按预期访问登录页面。但我也想访问从控制器返回的列表。我将 [AllowAnonymous] 属性添加到一个简单的服务,该服务返回用于填充下拉菜单的值。例如:
namespace WebAPI.Controllers
{
public class RegisterController : ApiController
{
[AllowAnonymous]
public List<ListElement> GetActivitiesList()
{
List<ListElement> li = new List<ListElement>();
li.Add(new ListElement() { Id = 1, Text = "Item 1" });
li.Add(new ListElement() { Id = 2, Text = "Item 2" });
li.Add(new ListElement() { Id = 3, Text = "Item 3" });
return li;
}
}
}
我将控制器目录添加到 web.config 中的允许列表中:
<location path="Controllers">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
如果我浏览示例页面以调用控制器,即使我添加了 [AllowAnonymous] 属性,表单身份验证仍会通过 302 重定向拒绝访问登录页面。如果我删除整个站点的授权元素“<deny users="?" />”,我可以使用 [Authorize] 和 [AllowAnonymous] 属性控制访问。
目标是能够在几个页面上为匿名用户使用特定服务(如注册),而其余的站点访问仅限于经过身份验证的用户。访问服务与访问文件并不完全相同,所以我的猜测是我必须为这种情况编写一个特殊的处理程序,但我不确定如何去做。