Asp.net mvc 3 如果我想使用属性来处理MVC返回的contentType,那么在OnResultExecuting或OnResultExecuted中执行会更好吗?

Asp.net mvc 3 如果我想使用属性来处理MVC返回的contentType,那么在OnResultExecuting或OnResultExecuted中执行会更好吗?,asp.net-mvc-3,actionfilterattribute,Asp.net Mvc 3,Actionfilterattribute,为了解决一个荒谬的问题,我需要在我的querystring中添加一个值,这是用javascript实现的,并测试它是否存在于服务器上,因为这可能来自ajax或iframe,所以很遗憾,没有可能的头,我正试图避免向我的元素添加值。为此,我设计了一个小片段,但我不确定将setter块放在哪里: using System.Web.Mvc; namespace Company.Client.Framework.Mvc { class CreateFormDialogResponseAttribut

为了解决一个荒谬的问题,我需要在我的querystring中添加一个值,这是用javascript实现的,并测试它是否存在于服务器上,因为这可能来自ajax或iframe,所以很遗憾,没有可能的头,我正试图避免向我的元素添加值。为此,我设计了一个小片段,但我不确定将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看起来像我不在乎你想做什么。这是准确的理解吗?

自我回答:

因为我需要重写ActionResult本身设置的值,所以我必须在方法完成工作后进入。因为我想避免开发人员手动设置类型的情况,所以我做了两个检查,一个检查我们是否应该设置它,另一个检查它是否是默认的application/json