我有这个问题似乎很常见,但我所读到的解决方案都没有在我的案例中有效。我试图在现有的MVC项目中添加ApiController。
当我尝试访问http://localhost:51362/api/test上添加的控制器时,出现此错误:{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:51362/api/test'.","MessageDetail":"No type was found that matches the controller named 'test'."}
我的项目包含以下NuGet包:
My Global.asax.cs(摘录):
RouteTable.Routes.Clear();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteTable.Routes.MapMvcAttributeRoutes();
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
我的WebApiConfig.cs:
using System.Web.Http;
namespace End.Web
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
我的新控制器:
using System.Web.Http;
namespace End.Web.Controllers
{
public class TestController : ApiController
{
public string Get()
{
return "ok";
}
}
}
我也尝试过属性路由但没有成功。我想做的事情似乎很简单。我错过了一些明显的东西吗?
答案 0 :(得分:2)
我知道这是一个老问题,但由于它从未得到接受的答案,我会试一试。
我也有这个问题。对我来说,这解决了这个问题:
GlobalConfiguration.Configure(config =>
{
config.Services.Replace(typeof(IHttpControllerTypeResolver), new DefaultHttpControllerTypeResolver());
...
});
就我而言,使用WebHostHttpControllerTypeResolver
代替DefaultHttpControllerTypeResolver
。 WebHostHttpControllerTypeResolver
首先从缓存(文件)中读取控制器类型,如果该文件存在,则会序列化并返回其内容。如果该文件不存在,则WebHostHttpControllerTypeResolver
会调用DefaultHttpControllerTypeResolver
。
我通过首先设置web api但没有任何API控制器来解决问题。这导致了缓存的控制器类型空列表,因此出现问题。由于控制器类型缓存在文件中,即使重新启动Web API,其内容也不会被删除。
另一种解决方案可能是删除存储缓存的控制器类型列表的文件。该文件名为MS-ApiControllerTypeCache.xml
,应位于C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root
文件夹中的某个位置。