3

次のようなカスタム フィルターを使用して、コンテンツ タイプを検証しています。

        public override void OnActionExecuting(HttpActionContext httpActionContext)
        {
            List<String> errors = new List<String>();

            // a
            if (httpActionContext.Request.Content.Headers.ContentType.MediaType == "application/json")
            {
            }
            else
            {
                errors.Add("Invalid content type.");
            }

                // more checks
        }

上記のコードは正常に動作していますが、検証ではリクエストの http 動詞をチェックする必要があります。これは、put または post のコンテンツ タイプのみを検証する必要があるためです。カスタム フィルターを httpget アクションから削除したくないのは、内部にさらにチェックがあるためです。また、フィルターを 2 つの部分に分割したくないため、フィルター内の http 動詞をチェックする必要がありますが、削除することもできます。方法がわかりません。

任意のヒント?

4

4 に答える 4

7

これからメソッドタイプ (post または put) を取得できます。

public override void OnActionExecuting(HttpActionContext actionContext)
{
    string methodType = actionContext.Request.Method.Method;
    if (methodType.ToUpper().Equals("POST") 
            || methodType.ToUpper().Equals("PUT"))
    {
         // Your errors
    }
}
于 2012-08-14T15:20:10.357 に答える
3

フィルターによって検証されるリクエストの HTTP メソッドを取得する必要がある場合は、リクエストの Method プロパティを調べることができます。

var method = actionContext.Request.Method;

ただし、フィルターを分解することをお勧めします。すぐに大きな泥のボールのシナリオに向かっているからです。

于 2012-08-14T15:25:40.240 に答える
0

コントローラーメソッドの上に標準の HTTPVerb 属性を使用する必要があります。

[HttpGet]
[HttpPut]
[HttpPost]
[HttpDelete]
[HttpPatch]

複数の MVC コントローラー:

[AcceptVerbs(HttpVerbs.Get, HttpVerbs.Post)]

複数の WebAPI コントローラー

[AcceptVerbsAttribute("GET", "POST")]
于 2013-04-26T12:40:30.170 に答える
-1

OnActionExecutingアクション フィルターのコンストラクターでは、ロジックの設定を行うオプション/名前付きパラメーターを渡すことができます。これらの設定に基づいて、ロジックを切り替えることができます。

public class MyActionFilterAttribute : ActionFilterAttribute
{
    private HttpVerbs mOnVerbs;

    public MyActionFilterAttribute(HttpVerbs onVerbs)
    {
        mOnVerbs = onVerbs;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var currentVerb = filterContext.HttpContext.Request.HttpMethod;

        if (mOnVerbs.HasFlag(HttpVerbs.Post)) { }
        else if (mOnVerbs.HasFlag(HttpVerbs.Get)) { }
        base.OnActionExecuting(filterContext);
    }
}

[MyActionFilter(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult Index()
{
}
于 2012-08-14T15:16:56.997 に答える