Gut*_*iro 6 c# asp.net-mvc asp.net-mvc-4 asp.net-web-api
我正在尝试使用ActionFilter属性,因此我可以拦截OnActionExecuting事件并在我的web api代码中进行令牌验证...下面是一些代码剥离了我的安全事项(一个漂亮的样板代码,用于检查令牌是否在具有实体框架的数据库):
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我只是将它应用到我的控制器上的一个动作方法,如下所示:
public class CustomerController : ApiController
{
[HttpPost]
[TokenValidationFilterAttribute]
public HttpResponseMessage Create(ActionData actionData)
{
return Request.CreateResponse(HttpStatusCode.OK);
}...
Run Code Online (Sandbox Code Playgroud)
所以,问题是,如果我在过滤器代码中放置断点,在第一行,我们甚至没有得到断点.我还添加了一些Debug.Print()存根来检查我的环境是否有任何问题...没有...代码只是不运行.
所以,任何人都有任何线索如何处理这个?我在这里检查一个解决方案是疯了,似乎这个actionFilters没有那么好记录.MSDN中只有一页,我已经实现了更多内容......
谢谢!我非常感谢任何帮助.
问候...
tpe*_*zek 17
很可能你来自System.Web.Mvc.ActionFilterAttribute不是来自System.Web.Http.Filters.ActionFilterAttribute.
第一个来自ASP.NET MVC,第二个来自ASP.NET Web API - 您需要第二个来自ApiController(因此您很可能在ASP.NET MVC应用程序中托管ASP.NET Web API) .
| 归档时间: |
|
| 查看次数: |
2579 次 |
| 最近记录: |