【问题标题】:Redirect in a .NET API action filter在 .NET API 操作过滤器中重定向
【发布时间】:2017-07-06 21:09:30
【问题描述】:

我希望能够读取 ActionFilterAttribute 中的请求标头,并引导用户。我还想维护现有的请求,或者将控制器和 URL 参数传递给新的请求。我知道这在 MVC 中很容易,但在 Web API 中还没有做到。

【问题讨论】:

  • MVC 和 WebApi 本质上是一回事。如果您知道如何在 MVC 中创建自定义属性,那么您应该已经掌握了 WebAPI 中的 99%。除非我误解了你的问题
  • 它们不是一回事。上下文和请求是不同的对象,重定向动作在 MVC 和 Web API 中是不同的。这可能都没有实际意义,你可能是对的,如果它只是调用像 Request.CreateRedirect 或类似的东西一样简单。但我不知道这样的方法,它需要 url 参数和 HTTP 方法类型。
  • 另外,需要明确的是,我知道如何创建属性。这是如何实现重定向,我不确定。我知道这有点愚蠢,而不是 RESTful API 的用途,但我的团队负责人希望我根据标头值重定向到同步或异步方法。所以我需要 CreateResponse,我想,但想知道是否有更简单的重定向,以便更清晰的可重用性。

标签: c# asp.net-web-api actionfilterattribute


【解决方案1】:

其实很简单。您只需创建 HttpResponseMessage 对象。

public class RedirectAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            var response = actionContext.Request.CreateResponse(HttpStatusCode.Redirect);
            response.Headers.Location = new Uri("https://www.stackoverflow.com");
            actionContext.Response = response;
        }
    }

【讨论】:

  • 当然还有base.onActionExcuting/Async。正是我想要的;谢谢!
  • 如果其他人遇到此问题,您可能需要using System.Net.Http; 才能使用CreateResponse
  • 这个响应返回到自己的ajax请求,但我想重定向到另一个页面..
猜你喜欢
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多