c# - 通过 dotnet 中的自定义属性发送 http 响应
问题描述
我正在 dotnet 中创建一个应该检查授权标头的自定义属性。如果它与一些硬编码的字符串相同,则应该通过,否则用户不应该能够使用指定的路线。
我想我得到了正确的响应头,但我不确定如果它失败了如何发送 HTTP 响应。
public class CustomAuthorization : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
var httpContext = context.HttpContext;
string authHeader = httpContext.Request.Headers["Authorization"];
if(authHeader == "Kawaii")
{
return;
//do nothing cause its fine
}
else
{
httpContext.Response.WriteAsync("The authorization header was incorrect, is should be Kawaii");
}
}
}
任何帮助将不胜感激!
解决方案
根据您的描述,听起来您应该使用OnActionExecuting
而不是OnActionExecuted
. context.HttpContext.Response
在正文中,您设置context.Result
为表示响应的 ActionResult而不是写入
public class CustomAuthorization : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
string authHeader = context.HttpContext.Request.Headers["Authorization"];
if(authHeader == "Kawaii")
return;
context.Result = new UnauthorizedResult();
}
}
但是,这种方法听起来更适合AuthorizationFilter而不是ActionFilter。查看过滤器管道文档,了解不同类型的过滤器及其作用的列表。
推荐阅读
- python - 一个工作片段不能再抓取它过去的数据
- maxscript - Maxscript中按钮上的字母下划线
- powershell - Powershell 脚本一直以“试运行”的方式运行,并且没有进行任何更改
- node.js - TypeError:'instanceof' 的右侧不可调用 JEST 和 SUPERTEST
- delphi - Delphi - DBGrid - 动态添加组合查找字段
- firebase - SwiftUI:Firebase 库未反映
- git - 本地 git 存储库路径的 git 命令
- linux - linux递归替换文件中的字符串
- python - 使用函数参数化 pytest
- android - Google OAuth 在生产中卡在加载屏幕上