感谢您的关注。
当使用普通(不是 WebAPI)操作过滤器时,这是一项微不足道的任务,因为我可以像这样更改 filterContext.Result 属性:
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary { { "controller", "Home" }, {"action", "Index" } });
不幸的是,我必须使用HttpActionContext
WebAPI,所以我无法访问filterContext.Result
.
那么我应该怎么做呢?我设置了过滤器,它确实在适当的时间执行,我只是不知道如何使它阻止执行请求的服务端点,而是指向另一个端点。
这是我的控制器:
[VerifyToken]
public class ProductController : ApiController
{
#region Public
public List<DAL.Product.CategoryModel> ProductCategories(GenericTokenModel req)
{
return HelperMethods.Cacheable(BLL.Product.GetProductCategories, "AllCategories");
}
public string Error() //This is the endpoint I would like to reach from the filter!
{
return "Not Authorized";
}
#endregion Public
#region Models
public class GenericTokenModel
{
public string Token { get; set; }
}
#endregion Models
}
这是我的过滤器:
using System.Web.Http.Controllers;
using ActionFilterAttribute = System.Web.Http.Filters.ActionFilterAttribute;
namespace Web.Filters
{
public class VerifyTokenAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext filterContext)
{
dynamic test = filterContext.ActionArguments["req"];
if (test.Token != "foo")
{
//How do I redirect from here??
}
base.OnActionExecuting(filterContext);
}
}
}
任何帮助表示赞赏。