Asp.net web api WEB API 2中的自定义异常处理

Asp.net web api WEB API 2中的自定义异常处理,asp.net-web-api,asp.net-web-api2,Asp.net Web Api,Asp.net Web Api2,我正在使用WEBAPI 2为我的应用程序提供后端。我在一些好的博客的帮助下使用自定义异常处理,现在我正在使用它工作良好,但我需要显示我的自定义消息,我正在传递自定义异常,下面需要帮助的是我的代码 public class GlobalException: System.Web.Http.ExceptionHandling.ExceptionHandler { public override void Handle(ExceptionHandlerContext context)

我正在使用WEBAPI 2为我的应用程序提供后端。我在一些好的博客的帮助下使用自定义异常处理,现在我正在使用它工作良好,但我需要显示我的自定义消息,我正在传递自定义异常,下面需要帮助的是我的代码

public class GlobalException: System.Web.Http.ExceptionHandling.ExceptionHandler
{

    public override void Handle(ExceptionHandlerContext context)
    {
        if (context.Exception is ArgumentNullException)
        {
            var result = new HttpResponseMessage(HttpStatusCode.BadRequest)
            {
             //Here i am getting some different value in message and in ParamName its give my custom message,How to access the ParamName rather then context.Exception.Message
                Content = new StringContent(context.Exception.Message),
                ReasonPhrase = "ArgumentNullException"
            };

            context.Result = new ArgumentNullResult(context.Request, result);
        }
        else
        {

        }
    }

    public class ArgumentNullResult : IHttpActionResult
    {
        private HttpRequestMessage _request;
        private HttpResponseMessage _httpResponseMessage;


        public ArgumentNullResult(HttpRequestMessage request, HttpResponseMessage httpResponseMessage)
        {
            _request = request;
            _httpResponseMessage = httpResponseMessage;
        }

        public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
        {
            return Task.FromResult(_httpResponseMessage);
        }
    }



 }

   //Controller Method in WEBAPI//
   public IHttpActionResult Sendmessage()
    {
       //here i am send null value with my custom message
      throw new ArgumentNullException("Test Null Value");
    }
public class globalexException:System.Web.Http.exceptionhanding.ExceptionHandler
{
公共重写无效句柄(例外HandlerContext上下文)
{
if(context.Exception是ArgumentNullException)
{
var结果=新的HttpResponseMessage(HttpStatusCode.BadRequest)
{
//在这里,我在message和ParamName中获得了一些不同的值。请给出我的自定义消息,如何访问ParamName而不是context.Exception.message
Content=新的StringContent(context.Exception.Message),
ReasonPhrase=“ArgumentNullException”
};
context.Result=新ArgumentNullResult(context.Request,Result);
}
其他的
{
}
}
公共类ArgumentNullResult:IHttpActionResult
{
私有HttpRequestMessage\u请求;
私人HttpResponseMessage(HttpResponseMessage);
公共参数NullResult(HttpRequestMessage请求、HttpResponseMessage HttpResponseMessage)
{
_请求=请求;
_httpResponseMessage=httpResponseMessage;
}
公共任务执行同步(CancellationToken CancellationToken)
{
返回Task.FromResult(_httpResponseMessage);
}
}
}
//WEBAPI中的控制器方法//
公共IHttpActionResult Sendmessage()
{
//这里我发送空值和我的自定义消息

抛出新ArgumentNullException(“测试空值”); }
要将“测试空值”作为内容返回,而不是“值不能为空。参数名称:测试值不能为空”。如果需要不同的行为,应使用常规异常或自定义异常


您不能使用ArgumentNullException,它需要参数名并相应地格式化消息

自定义消息的来源是什么?一般来说,您可以使用自定义异常来封装任何要发送的参数。“抛出新ArgumentNullException(“测试空值”);“这是我的自定义消息stringSo您想返回新StringContent(“测试空值”)对吗?”?除了context.Exception.Message之外,您更愿意以其他方式传递此值吗?或者您是否在context.Exception.Message中获得了一些其他值而不是“Test Null value”?是!,我得到一个值:context.Exception.message中的“value不能为null。Parameter name:Test value不能为null”你是说你只想在错误响应中返回你的自定义消息…?所以在ArgumentNullException中我不能发送我的自定义消息,我需要知道你可以(有一个带2个参数的构造函数),但一般来说你不应该这样做。它的主要目的是报告缺少的参数。如果要处理此类型的异常,最好使用((ArgumentNullException)context.exception).ParamName。如果您只想区分特殊异常,我会使用自定义异常类型