igo*_*ork 5 asp.net-mvc asp.net-web-api
我试图将Web API添加到现有的ASP.NET MVC项目中。这最初是一个ASP.NET MVC 2网站,后来使用以下过程将其升级到MVC 3,然后再升级到MVC 4:
将ASP.NET MVC 2项目升级到ASP.NET MVC 3
将ASP.NET MVC 3项目升级到ASP.NET MVC 4
我的Api控制器非常简单。实际上,这是默认模板:
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
}
Run Code Online (Sandbox Code Playgroud)
我添加了一个类来注册de API路由。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud)
从Application_Start调用
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试访问“ localhost:50315 / api / values”时,出现以下错误:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost:50315/api/values'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'values'.
</MessageDetail>
</Error>
Run Code Online (Sandbox Code Playgroud)
根据路由调试器的说法,该路由似乎运行正常,Web api路由是“匹配当前请求”的第一个条目。
解决方案是为 apicontroller 类提供不同的命名空间,就像 AardVark71 在评论中的建议一样。
现有的 MVC 有一个类似于 WebApplication.Controllers 的命名空间,并且 Web api 使用相同的命名空间。当我改变它时,一切正常。
完整的 Web Api 控制器如下所示:
namespace WebApplication.Api.Controllers
{
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17040 次 |
| 最近记录: |