2014-03-04 41 views
2

有沒有辦法在web api 2中捕獲並記錄badrequest或未經授權的響應代碼? 我嘗試添加onactionexecuted attributefilter和ExceptionLogger,但他們都沒有工作。如何在web api 2中記錄badrequest?

public IHttpActionResult ConfirmUpload(string val) 
{ 
    if (String.IsNullOrWhiteSpace(val)) 
     return BadRequest(val); 
} 

public static void Register(HttpConfiguration config) 
{ 
    AreaRegistration.RegisterAllAreas(); 
    config.Filters.Add(new ErrorLogAttribute()); 
    config.Services.Add(typeof(IExceptionLogger), new ErrorLogger()); 
} 

任何幫助表示讚賞。

回答

-1

要登錄錯誤的請求,你可以寫從ExceptionFilterAttribute

public class LogAttribute : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     Log.Error(context.Exception); 

     context.Response = context.Request.CreateResponse(
       HttpStatusCode.InternalServerError, 
       new { message = context.Exception.InnerException != null ? context.Exception.InnerException.Message : context.Exception.Message }); 

     base.OnException(context); 
    } 
} 

HttpActionExecutedContext得出自己LogAttribute包含有關請求的信息,以便您可以檢查請求的狀態,如果你需要。屬性可以應用到控制器,動作

public class ValueController : ApiController 
{ 
    [Log] 
    public IEnumerable<object> Get() 
    { 
    } 
} 

或全局添加

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Filters.Add(new LogAttribute()); 
    } 
} 

也都異常可以在Global.asax中

protected void Application_Error() 
{ 
    var ex = Server.GetLastError().GetBaseException(); 

    // ignore 404 
    if (!(ex is HttpException && ((HttpException)ex).GetHttpCode() == 404)) 
    { 
     Log.Fatal("Unhandled error catched in Global.asax", ex); 
    } 

    Server.ClearError(); 
} 
+0

嗨逮住,感謝你的回覆。我以前已經嘗試過這些東西。我猜的是返回BadRequest(val);對於web api來說並不是一個例外,所以它無法捕捉它。我會嘗試一些actionfilters。 –

+0

還有其他的OnResultExecuted方法可能對您有所幫助 –

+0

該方法是爲web api定義還是僅爲mvc定義? –