2013-12-18 39 views
1

我正在嘗試使用角度調用現有的控制器操作。

的JS調用是如下

$http.post("Delete", { 
     Id: id 
    }).success(function() { 
     $scope.getPagedData(); 
    }).error(function (data, status, headers, config) { 
     //TODO: data is the HTML of the "yellow screen" 
    }); 

我的控制器動作

[HttpPost] 
    public void Delete(Guid id) 
    { 
     throw new Exception("testing"); 
    } 

爲什麼不設置數據「試」什麼的,我可以告訴用戶?

+1

因爲控制器拋出異常而不是返回任何數據,所見即所得。 – zsong

+0

那麼沒有好的方法來拋出異常,並顯示它的消息?我必須返回一個包含錯誤屬性的對象,並在每次「成功」回調中檢查是否包含錯誤?這只是......愚蠢的。 – CaffGeek

+0

這並不愚蠢。如果你正在做SOA,如果出現問題,服務應該拋出500錯誤。這是SOA的內容。該API應該攜帶* http狀態*和*數據*。即使API失敗,你也不想返回200。 – zsong

回答

0

我想出了...

我首先創建一個JsonHandleErrorAttribute,我可以在我的控制器上的標記(可能將其添加到一個FilterConfig)

public class JsonHandleErrorAttribute : FilterAttribute, IExceptionFilter 
{ 
    public void OnException(ExceptionContext filterContext) 
    { 
     var response = filterContext.RequestContext.HttpContext.Response; 
     response.Write(filterContext.Exception.Message); 
     response.StatusCode = 500; 
     response.ContentType = MediaTypeNames.Text.Plain; 
     filterContext.ExceptionHandled = true; 
    } 
} 

因爲的StatusCode不是它的2xx仍然在javascript中輸入.error()。而且由於我用response.Write來打印出錯誤信息,所以我沒有所有額外的HTML標記。