c# - 如果在 WebAPI 中授权失败,如何返回自定义消息

标签 c# asp.net-web-api owin authorize-attribute

在我的 WebAPI 项目中,我有许多用 [Authorize] 属性装饰的 api。

[Authorize]
public HttpResponseMessage GetCustomers()
{
   //my api
}

如果用户没有正确的 token ,则会向用户返回拒绝访问异常。

但我需要的是,在任何此类情况下,我都需要将自定义响应消息返回为。

{
  "StatusCode" : 403,
  "message": "You donot have sufficient permission"
}

如果授权失败,我如何返回此自定义消息。

请注意:

  • 我正在使用 Owin - 基于 token 的身份验证。
  • 不会将访问 token 存储在我的数据库或其他任何地方。

最佳答案

有不同的方法可以做到这一点,但最好的方法之一是自定义授权属性。您只需要继承 AuthorizeAttribute 并覆盖 HandleUnauthorizedRequest() 方法它。

public class CustomAuthorization : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
    {
        actionContext.Response = new HttpResponseMessage
        {
            StatusCode = HttpStatusCode.Forbidden,
            Content = new StringContent("You are unauthorized to access this resource")
        };
    }
}

并像这样使用(CustomAuthorization 应该代替 Authorize)

    [CustomAuthorization]       
    public IHttpActionResult Get()
    {
        return Ok();
    }

否则您也可以在客户端捕获状态代码并显示您选择的自定义消息。

关于c# - 如果在 WebAPI 中授权失败,如何返回自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42505523/

相关文章:

design-patterns - 存储库模式中的数据库调用在哪里?

javascript - 在javascript中设置asp.net MVC4 web api路由url返回空字符串

c# - ASP.NET Identity 不会根据同一请求更新身份信息

asp.net-mvc - OwinStartup 未启动...为什么?

c# - 如何使用Owin中间件拦截404

c# - Roslyn:在单个源代码行上枚举精确的标记+琐事跨度?

c# - 最推荐的游戏 AI 线程模式是什么以及如何实现?

c# - 在 Lazy<T> 中转换接口(interface)类型

c# - 从 MailItem (Microsoft.Office.Interop.Outlook) 获取唯一 ID?

asp.net-mvc - Web api删除方法输入对象参数为空