我有一個控制器操作,應用了一個屬性,如果ModelState有錯誤,它將它們設置爲OnResultExecuting
方法中的JsonResult
。更改filterContext.Result in OnResultExecuting
我將值設置爲MyAction
。我在OnResultExecuting
中的屬性中更改它,但是在控制器中的OnResultExecuted
中,結果是來自控制器的結果,而不是在屬性中設置的結果。
所以我的問題是爲什麼OnResultExecuted
的值保持不變,我該如何讓它停止這樣做?
public class MyController:Controller
{
[ValidateDatedObject(SkipActionExecution = true, LeaveJustModelState = true)]
public JsonResult MyAction(ViewModel viewModel)
{
return new JsonResult { Data = new { Success = false }}; // Setting the initial value
}
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);//filterContext.Result here is the on from the controller instead of the one from the attribute
}
}
public class ValidateDatedObject : ModelValidationFilter
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
}//filterContext.Result here is the one from the attribute
}
public abstract class ModelValidationFilter : ActionFilterAttribute
{
private JsonResult getModelStateAsJsonResult(ModelStateDictionary modelState)
{
return new JsonResult { Data = new { modelState = SerializeErrors(modelState) } };
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.Result = getModelStateAsJsonResult(filterContext.Controller.ViewData.ModelState); //Setting filterContext.Result here
}
}
謝謝你的作品,但問題是我在'OnActionExecuting'中做了同樣的事情沒有任何問題。我知道這是一個不同的背景,但我發現這種行爲是完全意外的,也許這只是我。 – trebor
我也很驚訝,這就是爲什麼我最終看到了實現。這將是很高興知道這是否是由設計或錯誤/疏忽 –
非常感謝。以這種方式實施它是荒謬的。它應該已經實現,以便像其他過濾器屬性一樣獲取filterCotnext.result最終對象。 –