1

不条理な問題を解決するために、クエリ文字列に値を追加し (javascript でそれを行いました)、それがサーバー上に存在するかどうかをテストする必要があります (これは ajax または iframe に由来する可能性があるため、残念ながらヘッダーの可能性はありません) 、そして私は自分の<form>要素に値を追加することを避けようとしています)。そのために、私はこの小さなスニペットを考案しましたが、「セッター」ブロックをどこに置くべきかわかりません:

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)のように見えます。それは正しい理解ですか?

4

1 に答える 1

0

自己回答:

ActionResult 自体によって設定された値をオーバーライドする必要があるため、既に作業が完了しているため、メソッドの後に入る必要があります。開発者がタイプを手動で設定する状況を避けたいので、2 つのチェックを行っています。1 つは設定すべきかどうか、もう 1 つは「application/json」(デフォルト) かどうかを確認します。

于 2013-01-02T23:45:06.133 に答える