• 如何自定义oauthauthorizationserverprovider错误信息?


    We are using the OAuthAuthorizationServerProvider class to do authorization in our ASP.NET Web Api app.

    If the provided username and password is invalid in GrantResourceOwnerCredentials, the call

    context.SetError( "invalid_grant", "The user name or password is incorrect." );
    

    Produces the following Json result:

    {
        "error": "invalid_grant",
        "error_description": "The user name or password is incorrect."
    }
    

    Is there any way to customize this error result?
    I would like to make it consistent with default error message format used in other parts of the API:

    {
        "message": "Some error occurred."
    }
    

    Is this possible to achieve with the OAuthAuthorizationServerProvider?

    2016年10月12日24分24秒

     

    This is how I did it.

    string jsonString = "{"message": "Some error occurred."}";
    
    // This is just a work around to overcome an unknown internal bug. 
    // In future releases of Owin, you may remove this.
    context.SetError(new string(' ',jsonString.Length-12)); 
    
    context.Response.StatusCode = 400;
    context.Response.Write(jsonString);
    

    2016年10月11日24分24秒

     

    +1 for Dasun's answer. Here is how I extended it a bit further.

    public class ErrorMessage
    {
        public ErrorMessage(string message)
        {
            Message = message;
        }
    
        public string Message { get; private set; }
    }
    
    public static class ContextHelper
    {
        public static void SetCustomError(this OAuthGrantResourceOwnerCredentialsContext context, string errorMessage)
        {
            var json = new ErrorMessage(errorMessage).ToJsonString();
    
            context.SetError(json);
            context.Response.Write(json);
        }
    }
    

    The .ToJsonString() is another extension method that uses the Newtonsoft.Json library.

    public static string ToJsonString(this object obj)
        {
            return JsonConvert.SerializeObject(obj);
        }
    

    Usage:

    context.SetCustomError("something went wrong");
  • 相关阅读:
    在 MVC 控制器中使用 构造函数时行依赖注入 (IoC)
    跟我学 NHibernate (三)
    跟我学 NHibernate (二)
    跟我学 NHibernate (一)
    使用PetaPoco ORM 框架分页查询
    ASP.NET MVC 中使用 AjaxFileUpload 插件时,上传图片后不能显示(预览)
    在 mvc 中使用下拉列表
    String.Join() 方法 的用法
    动态为页面添加CSS样式文件引用
    禁止页面内按F5键进行刷新(扩展知识:禁止复制信息内容)
  • 原文地址:https://www.cnblogs.com/firstcsharp/p/5953423.html
Copyright © 2020-2023  润新知