naj*_*jam 33 asp.net-web-api asp.net-web-api-routing
我使用.net framework 4.5安装了使用mvc4的visual studio 2012.现在我想使用带有属性编写的webapi2,我希望我的hlep页面能够正确显示所有端点.
在我的解决方案中,我添加了一个新的mvc4基础emtpy项目并使用nuget i升级到mvc5,然后我安装了webapi2软件包.最后我已经为webapi2安装了帮助包.
现在,当我使用routeprefix时,我无法在帮助页面上看到任何内容,当我尝试在浏览器中访问我的webapi端点时,它会抛出以下错误.
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://expressiis.com/api/v1/'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'v1'.
</MessageDetail>
</Error>
namespace WebApi.Controllers
{
[RoutePrefix("api/v1")]
public class SubscribersController : ApiController
{
// GET api/<controller>
[Route("")]
[HttpGet]
public IQueryable<string> Get()
{
return new string[] { "value1", "value2" }.AsQueryable();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Kir*_*lla 49
根据您的信息,看起来您没有打电话httpConfig.MapHttpAttributeRoutes()(确保在任何传统路由注册之前调用此方法)
由于您尚未调用MapHttpAttributeRoutes,因此您的请求似乎与传统路由匹配,例如api/{controller}.这不起作用,因为匹配传统路线的路线永远不会看到用属性路线装饰的控制器/动作.
Jos*_*h C 34
我遇到的一个问题与Application_Start()中的排序有关.请注意下面的Web API配置顺序:
这不起作用
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
GlobalConfiguration.Configure(WebApiConfig.Register);
}
Run Code Online (Sandbox Code Playgroud)
这确实有效
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
Run Code Online (Sandbox Code Playgroud)
Kev*_*eil 18
我也有这个问题,经过长时间的搜索,我意识到我正在使用System.Web.Mvc.RouteAttribute而不是System.Web.Http.RouteAttribute
在纠正这个并使用之后config.MapHttpAttributeRoutes() everything worked fine.
小智 11
这不是你的情况(从你的示例代码中可以看出),但请记住用它结束Controller类名Controller.
否则它将不会被接收config.MapHttpAttributeRoutes();.
这个问题已经有一个选定的答案。但我对自己有不同的解决方案,并认为如果所选答案没有帮助,回复会有所帮助。
对我来说,这是一个愚蠢的错误。我有两个控制器,但只有一个在工作。解决方案是我的控制器类命名不正确!
我的工作控制器-
public class FooController : ApiController { }
Run Code Online (Sandbox Code Playgroud)
我的非工作控制器-
public class BarControllers : ApiController { }
Run Code Online (Sandbox Code Playgroud)
确保您的控制器类以Controller. 尾随s得到了我!
| 归档时间: |
|
| 查看次数: |
42903 次 |
| 最近记录: |