2013-10-15 45 views
6

ODataController'da istisnaları artırmak için izlenen en iyi uygulamaların neler olduğunu bilmek istiyorum.ASP.NET Odata Web API'sı için Hata Giderme

Yöntemde bir istisna oluşturursanız, varsayılan olarak 500 yanıt koduna çevrilir ve içeriğin hatayla ilgili ayrıntıları vardır. Yanıt kodunun açık olması ve geçersiz anahtar durumunda 400 gönderilmesini istiyorum.

Örneğin: Giriş isteğinde geçersiz bir anahtar varsa, HttpResponseCode 400 değerini döndürmek ister ve içeriğin, bir istisnayı yükseltmeye benzer hata ayrıntılarına sahip olması gerekir.

teşekkürler girişlerine

+0

Anahtar artırmalıdır bulunamadı Web Api eylem filtreleri kullanarak dönüştürmek 404 – qujck

cevap

1

için çok kullan HttpResponseException,
örn throw new HttpResponseException(HttpStatusCode.NotFound);.
Ayrıntılar here bulunabilir.

13

OData (v3 en azından beri) hataları temsil etmek specific json kullanır:

{ 
    "error": { 
     "code": "A custom error code", 
     "message": { 
      "lang": "en-us", 
      "value": "A custom long message for the user." 
     }, 
     "innererror": { 
      "trace": [...], 
      "context": {...} 
     } 
    } 
} 

Microsoft .Net bir sunucu tarafında OData hatayı oluşturmak üzere Microsoft.Data.OData.ODataError ve Microsoft.Data.OData.ODataInnerError sınıflarını içerir.

uygun OData hata yanıt ( HttpResponseMessage) oluşturulması için, bu hata olabilir ayrıntıları içerir: System.Web.OData.Extensions.HttpRequestMessageExtensions.CreateErrorResponse yöntemi kullanılarak

1) form ve kontrolörün eylem HttpResponseMessage geri

return Request.CreateErrorResponse(HttpStatusCode.Conflict, new ODataError { ErrorCode="...", Message="...", MessageLanguage="..." })); 

2) kullanılarak HttpResponseException atmak HttpResponseMessage

3) özel yazılan özel durum oluşturmak için aynı yöntem ve

public class CustomExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     if (context.Exception is CustomException) 
     { 
      var e = (CustomException)context.Exception; 

      var response = context.Request.CreateErrorResponse(e.StatusCode, new ODataError 
      { 
       ErrorCode = e.StatusCodeString, 
       Message = e.Message, 
       MessageLanguage = e.MessageLanguage 
      }); 
      context.Response = response; 
     } 
     else 
      base.OnException(context); 
    } 
} 
+0

'CreateODataErrorResponse' uzatma yöntemi ve bunun kullanmalısınız kullanımı nedir? – Rahul