0

数ヶ月前、私はいくつかのカスタム属性を持つWebApiアプリケーションを作成しました。それは素晴らしい作品です。コントローラのmvc 5属性が無視されています

私は現在、新しいMVC 5.2.3のWebサイトを作成しており、同じ属性を追加したいと考えていました。私はそれらを移動し、プロジェクトが構築され、属性が無視されていることを除いて正常に実行されます。

これは私のコントローラの装飾です:

[AuthorizeIt(Roles = "theRole")] 
[LogRequestResponse] 
public class HomeController : Controller{} 

この私の二つの属性の署名:

public class LogRequestResponseAttribute : ActionFilterAttribute 


[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = true)] 
public class AuthorizeItAttribute : AuthorizeAttribute 

私はより多くのコードを含めることができますが、私はそれがあるため、実際のコードの問題だとは思いません他のウェブサイトでも動作します。私の推測それはMVCとWebApiの違いであり、私は行方不明のいくつかの細部があります。

はい、私はASP.coreがwebApiとMVCを統合していることに気づいていますが、私が直面している問題を解決するには私の仕事はこれを許さないでしょう。

おかげで、

ボブ

+0

追加情報:新情報:私は私の属性は正常に動作ApiControllerを継承するために私のコントローラを変更した場合。彼らは元に戻っていない。 – Bob

答えて

0

は、私は私の問題のほとんどを解決し、私は解決できない1つの最後のアイテムを持っています。 WebAPIとMVCは、属性に関して最も高いレベルの要点では、同じオブジェクトを持つように見えますが、深く進むにつれて実際に異なるものになります。

例:AuthorizeAttributeは、使用する名前空間によって非常に異なります。 WebApiがHttpActionContextを要求している間、MVCバージョンではAuthorizationContextパラメータが必要です。

もう1つの例では、OnActionExecuted関数はMVCのパラメータとしてActionExecutedContextを要求しますが、WebApiはHttpActionExecutedContextを必要としています。

私の元のWebApiアトリビュートをMVCプロジェクトに配置してから、先頭からMVCネームスペースにいることを確認してから、必要に応じてドリルダウンしてオブジェクトを変更してください。

1つを除いて、webApiのすべてのコードに対応するMVCを見つけることができました。

var response = actionContext.Response?.Content?.ReadAsStringAsync().Result; 

actionContext is a HttpActionExecutedContext 

しかし、MVC

ので
actionContext is a ActionExecutedContext 

でOnActionExecuted機能で、私はと応答の内容を取得することができWebAPIのために

、上記のWebAPIコードは、MVCで応答が得られなくなっています。ストリームである

actionContext.HttpContext.Response.Filter 

:私はMVCでの応答内容を読んでてきたものから、 は次の場所にあります。しかし、ストリームを読み込もうとした方法が何通り違っても、それは常に読めない状態です。私の質問の

最後の未解決の一部です:

MVC 5:私は、カスタム属性を書いています。私は例えば、それをログに記録するか、または何を変えることができ

public override void OnActionExecuted(ActionExecutedContext actionContext) 

そして私は、応答内容を読みたい:私は、関数でいます。

まとめ:

  1. 質問に対する一般的な解決策は慎重に、カスタム属性の先頭に開始MVCに名前空間を変更してWEBAPIコードを置き換えるコードを介して動作することですMVCに相当する。非常に迷惑で退屈です。誰かが似たようなことを試していて、質問があれば、私は助けてくれるでしょう。

  2. 私は翻訳を見つけることができず、誰かが答えを知りたがっているコードの最後の部分があります。

おかげで....ボブ

関連する問題