在初始化函数中终止 Web API 请求的执行

本文关键字:API 请求 执行 Web 终止 初始化 函数 | 更新日期: 2023-09-27 18:35:56

我正在.net web api中开发一些Restful API。我正在使用的所有 API 控制器都继承自基本 API 控制器。它在初始化函数中有一些逻辑。

protected override void Initialize(HttpControllerContext controllerContext)
{
// some logic
}

有一个新的产品要求进来了,我想根据某些条件在 Initialize 函数中将响应返回给客户端。例如

 protected override void Initialize(HttpControllerContext controllerContext)
{
// some logic
   controllerContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "error");
}

但是,即使我已经返回了响应,.NET 管道似乎仍在继续。

无论如何可以在该函数内返回响应并停止执行吗?或者我必须重构现有代码才能以另一种方式执行此操作?

在初始化函数中终止 Web API 请求的执行

这是一种完成你想要的事情的黑客方法。抛出这样的异常。

protected override void Initialize(HttpControllerContext controllerContext)
{
       // some logic
       if(youhavetosend401)
           throw new HttpResponseException(HttpStatusCode.Unauthorized);
}

假设您要做的是关于授权的更干净的方法是像这样创建一个授权过滤器。

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool IsAuthorized(HttpActionContext context)
    {
        // Do your stuff and determine if the request can proceed further or not
        // If not, return false
        return true;
    }
}

在操作方法或控制器上甚至全局应用筛选器。

[MyAuthorize]
public HttpResponseMessage Get(int id)
{
     return null;
}

使用 HttpResponseException 发送为 Error 创建的 HttpResponseMessage。

protected override void Initialize(System.Web.Http.Controllers.HttpControllerContext controllerContext)
{ 
   //Your Logic
   throw new HttpResponseException(controllerContext.Request.CreateErrorResponse(System.Net.HttpStatusCode.Unauthorized, "error"));
   base.Initialize(controllerContext);
}

使用 Application.CompleteRequest()它将触发 EndRequest 事件。