2016-07-02 5 views
0

このような例外フィルタが指定されています。WebApi2フィルタのデフォルト例外オブジェクト

public override void OnException(HttpActionExecutedContext context) 
    { 
     var resp = new HttpResponseMessage(HttpStatusCode.InternalServerError) 
     { 
      // what must I change here to return an object 
      // similar to the default exception handler? 
      Content = new StringContent("THIS IS MY ERROR"), 
     }; 
     throw new HttpResponseException(resp); 
    } 

例外理由は、プレーン文字列でJavaScriptクライアントに返します。

例外がデフォルトWebApi2コントローラ、オブジェクトがを設定、データ、ヘッダなどが含ま返されるデフォルトの理由でスローされます。この余分な情報をすべて例外フィルタから返す方法の例は見つかりません。私は、同じデフォルトの応答ではなく、単なる文字列を返すために変更する必要が何をすべきか...無駄にソースをチェックアウトする

enter image description here

$http.get('/mydata') 
    .catch(function(reason) { ... do stuff with reason }) 
    .then(...); 

を試してみました。

Content = new ... // what goes here. 
+0

私には正確なコードはありませんが、私はこれを数回しました。 'IHttpActionResult'を返す必要があります。これにより、500,400,401,403などのHTTPステータスコードを返信することができます –

+0

ありがとうございます:Fermatは誇りに思うでしょう – Jim

答えて

0

この特定の問題を持つ他の人

public override void OnException(HttpActionExecutedContext context) 
{ 
    var exception = context.Exception as DbEntityValidationException; 
    if (exception == null) 
     return; 

    var errors = exception.EntityValidationErrors.SelectMany(_ => _.ValidationErrors); 
    var messages = errors.Select(_ => Culture.Current($"{_.PropertyName}:{_.ErrorMessage}")); 
    var message = Culture.Current($"{context.Exception.Message}<br/>{string.Join("<br/>", messages)}"); 

    // create an error response containing all the required detail... 
    var response = context.Request.CreateErrorResponse(
     HttpStatusCode.InternalServerError, 
     message, 
     exception); 
    throw new HttpResponseException(response); 
} 
0

エラーメッセージを取得しない理由は、あなたのHttpResponseMessageがそれを含んでいないです。
ですから、オブジェクト

 
    public override void OnException(HttpActionExecutedContext context) 
     { 
      if (context.Exception is NotImplementedException) 
      { 
       context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented); 
      } 
     } 

をresponeするためにそれを追加する必要がありますし、あなたの行動には、あなたがNotImplementedException例外

[NotImplExceptionFilter] 
    public Contact GetContact(int id) 
    { 
     throw new NotImplementedException("This method is not implemented"); 
    } 

を投げるには、それがお役に立てば幸いです。

+1

JavaScriptデータオブジェクトがどのようにクライアントに返されるかを説明するのに役立つものではありませんデフォルトではIHttpActionResult – Jim

関連する問題