我在现有的web api项目中添加了一个非常简单的新控制器,并获得了#34;没有找到与名为' Filter'过滤器'匹配的控制器匹配的类型。我去http://localhost/ExceptionManagement/Api/Filter时的消息。
我在控制器中使用和不使用Route属性都尝试过它。我在WebApiConfig中使用了默认路由以及显式路由。作为一个实验,我添加了另一个控制器,只是使用Visual Studio默认值并获得尝试连接到新控制器的相同错误消息。
更糟糕的是,我有一个现有的控制器按预期工作,但我无法弄清楚那个控制器是如何不同的。
控制器:
public class FilterController : ApiController
{
[Route("Api/Filter")]
public string Get()
{
string ret = "Is this thing on?";
return ret;
}
}
WebApiConfilg文件:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
或
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "ExceptionFilter",
routeTemplate: "Api/Filter",
defaults: new { action = "Get", controller = "Filter" },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
和Global.asax:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings
.Add(new System.Net.Http.Formatting.RequestHeaderMapping("Accept",
"text/html",
StringComparison.InvariantCultureIgnoreCase,
true,
"application/json"));
}