如何从IHttpControllerSelector返回状态代码?

时间:2018-11-22 08:41:06

标签: c# asp.net-web-api2

  

https://docs.microsoft.com/en-us/previous-versions/aspnet/hh944864(v%3Dvs.118)

我目前正在实现API版本控制。如果提供的版本无效,我想以状态代码406进行响应。如何通过IHttpControllerSelector的SelectController方法执行此操作?

当前正在考虑创建某种类型的ErrorController并路由到它,但不确定是否有其他选择?

2 个答案:

答案 0 :(得分:0)

创建一个返回Http 406的新控制器。 创建一个HttpControlDescriptor并重写CreateController来创建新的控制器。 然后IHttpControllerSelector实现返回控制描述符,然后构造该控制器,该控制器返回的版本无效。

答案 1 :(得分:0)

当前创建了一个处理异常的错误控制器,并通过以下方式路由至该异常:

var routeData = request.GetRouteData().Values;

routeData.Clear();
routeData["controller"] = "Error";
routeData["problemDetails"] = problemDetails;

return base.SelectController(request);

它可以工作,但我不是一个忠实的粉丝,如果有其他更好的选择,请暂时搁置这个问题。