2013-10-19 31 views
1

我正在處理.net web api中的一些Restful API。我正在使用的所有API控制器都從基礎API控制器繼承。它在Initialize函數中有一些邏輯。終止執行初始化函數中的web api請求

protected override void Initialize(HttpControllerContext controllerContext) 
{ 
// some logic 
} 

有一個新的產品需求進來,我想這取決於一些條件來返回到客戶端的響應的初始化函數。 例如

protected override void Initialize(HttpControllerContext controllerContext) 
{ 
// some logic 
    controllerContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "error"); 

} 

但是,它似乎仍然繼續前進,即使我已經返回響應。

有無論如何返回該函數內的響應並停止執行?或者我必須重構現有的代碼以另一種方式來完成它?

+0

嘗試調用Response.End或Application.CompleteRequest() –

回答

4

這是一個很難實現你想要的方法。拋出像這樣的異常。

protected override void Initialize(HttpControllerContext controllerContext) 
{ 
     // some logic 
     if(youhavetosend401) 
      throw new HttpResponseException(HttpStatusCode.Unauthorized); 
} 

的更清潔的方式,假設你正在嘗試做的是所有關於授權是創建一個授權過濾器像這樣。

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool IsAuthorized(HttpActionContext context) 
    { 
     // Do your stuff and determine if the request can proceed further or not 
     // If not, return false 
     return true; 
    } 
} 

將過濾器應用於操作方法或控制器,甚至全局。

[MyAuthorize] 
public HttpResponseMessage Get(int id) 
{ 
    return null; 
} 
0

使用HttpResponseException發送爲Error創建的HttpResponseMessage。

protected override void Initialize(System.Web.Http.Controllers.HttpControllerContext controllerContext) 
{ 
    //Your Logic 
    throw new HttpResponseException(controllerContext.Request.CreateErrorResponse(System.Net.HttpStatusCode.Unauthorized, "error")); 
    base.Initialize(controllerContext); 
} 
0

使用 Application.CompleteRequest() 這將觸發EndRequest事件。