pub*_*tic 9 c# asp.net-mvc asp.net-web-api
我想创建一个web api过滤器,检查请求标头是否具有正确的Api密钥.
如果没有,我想返回403响应代码并停止执行(禁止的操作)
public class ApiPermission : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
}
}
Run Code Online (Sandbox Code Playgroud)
使用filterContext我知道我可以做类似的事情:
filterContext.Result = new RedirectTo...
Run Code Online (Sandbox Code Playgroud)
但是如何将状态代码更改为403并返回一个字符串并停止执行并停止处理其他过滤器和控制器操作?
看起来发布的答案与 Asp.Net Core 2.1 不兼容。在核心你可以做这样的事情
filterContext.Result = new ObjectResult(actionContext.ModelState)
{
Value = null,
StatusCode = StatusCodes.Status403Forbidden
};
Run Code Online (Sandbox Code Playgroud)
或者也许创建像 BadRequest 这样的类会很方便,但对于 403 代码。
public class ForbiddenObjectResult : ObjectResult
{
public ForbiddenObjectResult(object value)
: base(value)
{
StatusCode = StatusCodes.Status403Forbidden;
}
}
...
filterContext.Result = new ForbiddenObjectResult(filterContext.ModelState);
Run Code Online (Sandbox Code Playgroud)
如果您不想抛出异常,则可以返回 HttpStatusCodeResult
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.Result != null) return; //Another filter has already returned a result so pass it on
//Do your filtering
filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Forbidden");
}
Run Code Online (Sandbox Code Playgroud)
您可以抛出HttpException,它允许您传递任何 HTTP 代码并停止执行(因为它是一个异常)
throw new HttpException(403, "Forbidden");
Run Code Online (Sandbox Code Playgroud)
或者查看在创建 ErrorResponse 的WebAPI 方法中返回 HTTP 403 。
您可能还需要考虑将其移至 AuthorizationFilterAttribute 中,因为您正在检查用户的 API 密钥以授权他们执行该操作。
归档时间: |
|
查看次数: |
5550 次 |
最近记录: |