c# - 在 c# web api 中重定向 HTTP 响应的正确方法是什么?
问题描述
以下是我们网站的示例回复。
HTTP 响应代码为 404(未找到)
{ "Message": "没有找到与请求 URI ' http://localhost:2425/Prefix/Controller?parameter=param1 '匹配的 HTTP 资源。", "MessageDetail": "在控制器 'Controller 上没有找到任何操作' 与请求相匹配。” }
我们应该能够将 HTTP 响应修改为 403(错误请求),因为用户返回的参数不完整(还有另一个参数,例如 parameter2),这也是必需的,我们还应该将消息详细信息修改为可自定义的内容。
这是可以实现的吗?
下面是来自 WebApiConfig.cs 的示例方法
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我尝试删除 config.MapHttpAttributeRoutes(),但如果参数不匹配,应用程序不会转到控制器,因此我可以返回响应。
解决方案
您可以创建中间件类,您可以在控制器获取它之前和控制器执行之后检查和修改 HTTP 请求数据(参数、标头、路由、返回状态码结束等)。这是一个很好的中间件示例
推荐阅读
- c++ - 为什么编译器将字符打印为笑脸
- python - 如何保存数据,以便在关闭并重新打开 tkinter 应用程序后仍然存在?
- python-3.x - 超出最大递归深度:python 中的抽象属性继承
- flutter - 如何替换dart中字符串中出现的n个子字符串?
- reactjs - 使用 MUI 访问样式化组件内的道具
- reactjs - 如何在 React.js 和 ASP.NET Core 中单击树节点上打开组件?
- java - 在 Android 中添加或不添加年份切换到 DatePicker
- terraform - Nomad作业文件中的base64encode未编码变量的值
- javascript - 无法在 API JSON 中获得成绩
- python - 输入张量在 ConvNet 内变为 None 类型