ActionFilter属性を使用して、 OnActionExecutingイベントをインターセプトし、Web APIコードでトークン検証を実行しようとしています...以下は、セキュリティ関連のものを取り除いたコードです(トークンがEntity Frameworkを使用したデータベース):
public class TokenValidationFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var data = new ActionData();
if (filterContext.HttpContext.Request.QueryString.AllKeys.Contains("token"))
{
using (var context = new GNCCustomers())
{
data.GNCToken = context.Tokens.Where(t => t.GNCToken == filterContext.HttpContext.Request["token"]).SingleOrDefault();
if (data.GNCToken == null)
{
filterContext.Result = new HttpUnauthorizedResult("MissingOrInvalidToken") ;
return;
}
}
data.HttpVerb = filterContext.HttpContext.Request.HttpMethod;
foreach (string item in filterContext.HttpContext.Request.QueryString)
{
data.Params.Add(item, filterContext.HttpContext.Request.QueryString[item]);
}
data.Path = filterContext.RouteData.Values;
filterContext.ActionParameters["actionData"] = data;
}
base.OnActionExecuting(filterContext);
}
}
これをコントローラーの1つのアクションメソッドに次のように適用しました。
public class CustomerController : ApiController
{
[HttpPost]
[TokenValidationFilterAttribute]
public HttpResponseMessage Create(ActionData actionData)
{
return Request.CreateResponse(HttpStatusCode.OK);
}...
したがって、問題は、フィルターコードにブレークポイントを設定した場合、最初の行でブレークポイントがヒットしなかったことです。また、いくつかのDebug.Print()スタブを追加して、環境に問題があるかどうかを確認しました...何も...コードが実行されないだけです。
だから、誰もがこれを処理する方法についての手がかりを持っていますか?私はここで解決策をチェックすることに気が狂っており、このactionFiltersはあまり文書化されていないようです。MSDNには1ページしかなく、私がすでに実装したことは何も言っていません...
ありがとう!助けてくれて本当に感謝しています。
よろしく...