如何从OnException方法发送自定义对象?

时间:2015-06-03 13:56:33

标签: c# asp.net asp.net-mvc asp.net-web-api2

public override void OnException(
         System.Web.Http.Filters.HttpActionExecutedContext actionExecutedContext)
    {
        if (actionExecutedContext.Exception != null)
            Elmah.ErrorSignal.FromCurrentContext().Raise(actionExecutedContext.Exception);
        base.OnException(actionExecutedContext);


        throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
        {
            Content = new StringContent(actionExecutedContext.Exception.Message),
            ReasonPhrase = "Deadly Exception",
        });
    }

这是我传递给任何asp.net web api的模型的过滤器。

它就像一个魅力!

但在我的情况下,我想要的是将自定义对象(奇怪的需要)返回给用户,如:

public class ErrorModel
{
   public int StatusCode {get;set;}
   public string ErrorMsg {get;set;}
}

我想做的是(如果可能的话):

 public override void OnException(
         System.Web.Http.Filters.HttpActionExecutedContext actionExecutedContext)
    {



        ErrorModel er = new ErrorModel(); //////////// object of class


        if (actionExecutedContext.Exception != null)

         er.StatusCode =200
         er.ErrorMsg="My Custom Msg" 

        // return er object 

    }

我想从此函数发回对象,但此方法的返回类型为void

我知道HttpResponseMessage对象可以被抛回,但我想以自定义方式进行...

我该怎么做?

1 个答案:

答案 0 :(得分:2)

我想你想把那个类作为JSON返回。

你可以做的仍然是使用StringContent构造函数,但是传入一个JSON序列化字符串。您可以将Newtonsoft.Json用作序列化。

throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
{
    Content = new StringContent(JsonConvert.SerializeObject(yourObject))
});