gpt4 book ai didi

asp.net-mvc-4 - 使用 MVC 4 和 WebAPI,如何从自定义过滤器中重定向到备用服务端点?

转载 作者:行者123 更新时间:2023-12-01 01:05:43 25 4
gpt4 key购买 nike

谢谢你看。

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

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

不幸的是,我必须使用 HttpActionContext为WebAPI,所以我无法访问 filterContext.Result .

那么我应该怎么做呢?我设置了过滤器,它确实在适当的时间执行,我只是不知道如何让它阻止执行请求的服务端点,而是指向不同的端点。

这是我的 Controller :
[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);
}
}
}

任何帮助表示赞赏。

最佳答案

就我而言,答案只是更改 Response filterContext 的属性(property)而不是重定向到不同的端点。这达到了预期的结果。

这是修改后的过滤器:

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);
}
}

关于asp.net-mvc-4 - 使用 MVC 4 和 WebAPI,如何从自定义过滤器中重定向到备用服务端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18884457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com