在追求解决一个荒谬的问题时,我需要在我的查询字符串中添加一个值(在javascript中执行该操作)并测试它是否存在于服务器上(因为这可能来自ajax或iframe,所以没有标题遗憾的是,我正试图避免在我的<form>
元素中添加值。为此,我设计了这个小片段,我不知道在哪里放置“setter”块:
using System.Web.Mvc;
namespace Company.Client.Framework.Mvc
{
class CreateFormDialogResponseAttribute : ActionFilterAttribute
{
private bool SetContentType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
SetContentType = !filterContext.HttpContext.Request.Params["FormDialogRequest"].IsEmpty();
base.OnActionExecuting(filterContext);
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
//do I set it here? (A)
if (SetContentType)
filterContext.HttpContext.Response.ContentType = "text/json";
base.OnResultExecuting(filterContext);
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
//do I set it here? (B)
if (SetContentType)
filterContext.HttpContext.Response.ContentType = "text/json";
base.OnResultExecuted(filterContext);
}
}
}
如果我将其设置为(A)
,那么似乎客户端仍然有时间“覆盖”该属性,如果需要的话。而(B)
看起来像“我不在乎你认为你想做什么”的位置。这是一个准确的理解吗?
答案 0 :(得分:0)
自答案:
因为我需要覆盖ActionResult本身设置的值,所以我必须在方法之后进入,因为它已经完成了它的工作。因为我想避免开发人员手动设置类型的情况,我正在进行两次检查,一次检查是否应该设置它,一次检查它是否是“application / json”(默认值)。