我對ActionResult實際得到評估的時間有點困惑。ActionResult何時被評估?
當使用授權屬性,我可以看到,如果用戶沒有被授權,結果上下文被設置爲未經授權的結果:
filterContext.Result = new HttpUnauthorizedResult();
然而,AuthorizeAttribute沒有做重定向,相反,它只是簡單地設置通過.NET管道「流動」的上下文,直到將其轉換爲401頭部爲止。
我的問題是什麼在.Net實際上做轉換?
我對ActionResult實際得到評估的時間有點困惑。ActionResult何時被評估?
當使用授權屬性,我可以看到,如果用戶沒有被授權,結果上下文被設置爲未經授權的結果:
filterContext.Result = new HttpUnauthorizedResult();
然而,AuthorizeAttribute沒有做重定向,相反,它只是簡單地設置通過.NET管道「流動」的上下文,直到將其轉換爲401頭部爲止。
我的問題是什麼在.Net實際上做轉換?
我有點困惑,當ActionResult實際上被評估。
的ActionResult 得到評估(不刷新到HTTP響應或客戶端)後IResultFilter.OnResultExecuting和前IResultFilter.OnResultExecuted
現在你與授權屬性證明是行動過濾器,它使開發人員能夠在Action Filter生命週期中更改/更改操作結果。在授權屬性中,如果用戶未通過驗證,則它將行動結果更改爲HttpUnauthorizedResult。現在,你說的是什麼
東西轉換到這401頭
,但實際上它是HttpUnauthorizedResult其設置響應頭401在實例的ActionResult對象。一旦ActionResult被實例化,它將被刷新到HTTP響應管道。
周圍挖一點點,我看到所有ActionResults從抽象類ActionResult的,它有一個抽象方法繼承:的ExecuteReuslt
public abstract class ActionResult
{
public abstract void ExecuteResult(ControllerContext context);
}
正是這種方法每個動作的結果與自己的實現邏輯。
因此,舉例來說,JsonResult需要指定的ContentType:
response.ContentType = "application/json";
雖然FileResult設置了 「內容處置」 標題:
context.HttpContext.Response.AddHeader("Content-Disposition", headerValue);