我正在尝试编写自定义Authorize属性来授权某些API端点和MVC操作。在这个StackOverflow answer之后,我编写了一个自定义属性。我使用UnauthorizedResult返回401.
答案 0 :(得分:1)
回答您的第一个问题,这是覆盖的授权方法属性的样子。错误消息将是状态消息,内容在响应正文中。
public override Task OnAuthorizationAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
{
string errorMessage = "User has no enough permissions to perform requested operation.";
var httpContent = new StringContent("{ \"some\": \"json\"}", Encoding.UTF8, "application/json");
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden)
{
ReasonPhrase = errorMessage,
Content = httpContent
};
return Task.FromResult<object>(null);
}
从MVC操作中,您可以返回状态代码,例如return StatusCode(418);
或使用return Unauthorized();
等专用方法。要重定向,您可以使用RedirectToAction
或context.Response.Redirect
答案 1 :(得分:0)
至少适用于ASP.NET Core
的更现代的响应是
public async Task<IActionResult> CtrlAction()
{
...
var result = // whatever object you want
return StatusCode((int) HttpStatusCode.Unauthorized, result);
}