2

POSTアクションメソッドを単体テストする必要があるため、それらのリストが必要です。私はリフレクションを使用して、でこれらのメソッドを見つけています[AcceptVerbs(HttpVerbs.Post)]

// get controller's methods
typeof(FooController).GetMethods()

// get controller's action methods
.Where(q => q.IsPublic && q.IsVirtual && q.ReturnType == typeof(ActionResult))

// get actions decorated with AcceptVerbsAttribute
.Where(q => q.CustomAttributes
  .Any(w => (w.AttributeType == _typeof(AcceptVerbsAttribute)))
  )

// ...everything is ok till here...

// filter for those with the HttpVerbs.Post ctor arg
.Where(q => q.CustomAttributes
  .Any(w => w.ConstructorArguments.Any(e => e.Value.Equals(HttpVerbs.Post))))
;

しかし、これは私に空のリストを与えます。問題は、属性のコンストラクターの最後のチェックにあります。どうすれば修正できますか?

アクションのメソッドをPOSTとして宣言するには、AcceptVerbsAttribute上記のように使用する方法と、の2つの方法があることに注意してくださいHttpPostAttribute

4

2 に答える 2

2

以下を変更します。

w => w.ConstructorArguments.Any(e => e.Value.Equals(HttpVerbs.Post))

w => w.ConstructorArguments.Any(e => ((HttpVerbs) e.Value) == HttpVerbs.Post)

そして、それはうまくいくはずです。

于 2013-01-15T18:36:37.320 に答える
1

[AcceptVerbs(HttpVerbs.Post)]の代わりに[HttpPost]属性を使用して、式を簡略化することもできます。

http://msdn.microsoft.com/en-us/library/system.web.mvc.httppostattribute(v=vs.108).aspx

于 2013-01-16T06:12:50.810 に答える