首页 > 解决方案 > 在 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(),但如果参数不匹配,应用程序不会转到控制器,因此我可以返回响应。

标签: c#asp.netredirectroutesresponse

解决方案


您可以创建中间件类,您可以在控制器获取它之前和控制器执行之后检查和修改 HTTP 请求数据(参数、标头、路由、返回状态码结束等)。这是一个很好的中间件示例


推荐阅读