4

感谢您的关注。

当使用普通(不是 WebAPI)操作过滤器时,这是一项微不足道的任务,因为我可以像这样更改 filterContext.Result 属性:

 filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary { { "controller", "Home" }, {"action", "Index" } });

不幸的是,我必须使用HttpActionContextWebAPI,所以我无法访问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);
        }
    }
}

任何帮助表示赞赏。

4

1 回答 1

4

在我的情况下,答案只是更改的Response属性,filterContext而不是重定向到不同的端点。这达到了预期的结果。

这是修改后的过滤器:

public class VerifyTokenAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext filterContext)
        {
            dynamic test = filterContext.ActionArguments["req"];
            if (test.Token != "foo")
            {
                filterContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
            }

            base.OnActionExecuting(filterContext);
        }
    }
于 2013-09-19T00:54:56.170 回答