我使用WebApi选项创建了一个ASP.Net MVC项目。然后使用以下代码修改值控制器:
public class ValuesController : ApiController
{
static List<string> data = initList();
private static List<string> initList()
{
var ret = new List<string>();
ret.Add("value1");
ret.Add( "value2" );
return ret;
}
// GET api/values
public IEnumerable<string> Get()
{
return data ;
}
// GET api/values/5
public string Get(int id)
{
return data[id];
}
// POST api/values
public void Post([FromBody]string value)
{
data.Add(value);
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
data[id] = value;
}
// DELETE api/values/5
public void Delete(int id)
{
data.RemoveAt(id);
}
}
当我运行项目并导航到API /值URL时,以下图像显示错误。
文本中的错误说明是:
&LT;错误&GT; 此请求已被拒绝授权。 &LT; /错误&GT;
答案 0 :(得分:0)
查看以下有关
的文章Authentication and Authorization in ASP.NET Web API
它将解释如何在控制器/操作上使用[Authorize]
和[AllowAnonymous]
属性的不同方法以及您需要执行的任何配置。
以下摘自以上链接文章:
使用[授权]属性
Web API提供内置授权过滤器,
AuthorizeAttribute
。此过滤器检查用户是否 认证。如果没有,则返回HTTP状态码401(未授权), 没有调用动作。您可以在控制器级别或全局应用过滤器 等级行动。
全局:要限制每个Web API控制器的访问权限,请添加
AuthorizeAttribute
过滤到全局过滤器列表:public static void Register(HttpConfiguration config){ config.Filters.Add(new AuthorizeAttribute()); }
控制器:要限制特定控制器的访问权限,请添加 过滤器作为控制器的属性:
// Require authorization for all actions on the controller. [Authorize] public class ValuesController : ApiController { public HttpResponseMessage Get(int id) { ... } public HttpResponseMessage Post() { ... } }
操作:要限制特定操作的访问权限,请将属性添加到 行动方法:
public class ValuesController : ApiController { public HttpResponseMessage Get() { ... } // Require authorization for a specific action. [Authorize] public HttpResponseMessage Post() { ... } }
或者,您可以限制控制器然后允许 使用
[AllowAnonymous]
匿名访问特定操作 属性。在以下示例中,Post方法受到限制, 但Get方法允许匿名访问。[Authorize] public class ValuesController : ApiController { [AllowAnonymous] public HttpResponseMessage Get() { ... } public HttpResponseMessage Post() { ... } }
在前面的示例中,过滤器允许任何经过身份验证的用户 访问受限制的方法;只有匿名用户才会被拒之门外。您 还可以限制对特定用户或特定角色用户的访问:
// Restrict by user: [Authorize(Users="Alice,Bob")] public class ValuesController : ApiController { } // Restrict by role: [Authorize(Roles="Administrators")] public class ValuesController : ApiController { }
答案 1 :(得分:0)
所以,我已经处理了一段时间了。
起初我不理解它,所以我只是移走并忍受了它。
我终于讨厌它了,因为它很愚蠢。 Microsoft希望用户在登录之前得到授权。
我的错误是寻找要HomeTown的GET方法。就我而言,我已将其更改为CityCode。
由于用户尚未登录,因此没有要获取的CityCode。因此,您将找到402或500资源。
我还是不明白,我给了CityCode一些默认数据。因此,在MeController中,我输入了以下代码:
Public Function [Get]() As GetViewModel
将userInfo设为ApplicationUser = UserManager.FindById(User.Identity.GetUserId())
使用{.CityCode =“ 94110”}返回新的GetViewModel()
结束功能
应用程序现在完全加载无错误。
这是快速解决方案,而不是经过认证的解决方案。