Web API Owin:如何"remap/rename"由 BaseValidatingContext.SetError 创建的 json 响应中的字段



我正在我的 Web API2 服务器(在 IIS 下运行)中实现基于 OAuth 令牌的安全性

我正在使用提供OAuthAuthorizationServerProvider等的各种中间件,这些中间件采用从BaseValidatingContext派生的各种参数

例如,我有以下代码片段...

 public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {                       
        var result = await GetAuthenticateAndGetClaimsAsync("dummy", context.UserName, context.Password);
        if (result.HasError)
        {             
          context.SetError("Error code", "Error description);             
          return;
        }

context.SetError("Error code", "Error description);的调用将使响应的正文具有以下内容。

{
   "error": "Error code",
   "error_description": "Error description
}

我想更改这些字段的名称以反映我在应用程序其他地方使用的错误,因此我可以有类似的东西。

 {
   "code": "Error code",
   "message": "Error description
}

这可能吗,如果是,我该怎么做?

能够自己设置状态代码可能也很好,但这并不重要,我想更改的更多是上述字段。

提前感谢您的任何建议。

嗨,

尝试创建自定义错误对象,然后可能使用一种方法(扩展方法)将AspNEt的错误映射到您的错误..有些像:

public class MyCustomError{
  public string Code {get; set;}
  public string Message {get; set;}
}

然后你可以创建

public static class ErrorManager{
   public static ToMyCustomError(this Error err){ //<-- set Here the CORRECT TYPE RETURNING FROM context.SetError
      return new MyCustomError{
        Code = err.error;
        Message=err.error_description;
       }
   }
}

然后你可以像这样使用:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {                       
        var result = await GetAuthenticateAndGetClaimsAsync("dummy", context.UserName, context.Password);
        if (result.HasError)
        {             
          return context.SetError("Error code", "Error  description).ToMyCustomError();
        }
}

相关内容

  • 没有找到相关文章

最新更新