[英]ASP.NET Web Api Routing Broken
我无法在asp.net Web API项目中使用基本路由。 我在asp.net( http://www.asp.net/web-api/overview/web-api-routing-and-actions )上关注了一些示例,并在整个stackoverflow中进行了搜索,以寻求解决方案。 无论我尝试过什么示例,都无法使属性路由正常工作。
这是我的控制器:
public class EmployeeController : ApiController
{
private readonly IRepository<Employee> _employees;
public EmployeeController(IRepository<Employee> repo)
{
_employees = repo;
}
[Route("")]
public IEnumerable<Employee> GetEmployees()
{
return _employees.Queryable();
}
[Route("{id:int}")]
public Employee GetEmployee(int id)
{
return _employees.Queryable().FirstOrDefault();
}
}
这是我的Global.asax.cs:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
这是我的WebApiConfig.cs:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
无论我尝试什么,最终都会得到404或上面的代码,我得到消息
找不到与请求URI'http :// localhost:2442 / api / employee / 1 '匹配的HTTP资源。
在与请求匹配的控制器“雇员”上未找到任何操作。
带有或不带有整数参数。
您是否尝试过将RoutePrefix属性放在您的类上,如下所示:
[RoutePrefix("api/employee")]
public class EmployeeController : ApiController
为您的控制器使用属性路由,或者不全部使用它。 这意味着您需要用RoutePrefix装饰控制器,而不是依靠配置的路由。
[RoutePrefix("api/employee")
public class EmployeeController : ApiController
{
private readonly IRepository<Employee> _employees;
public EmployeeController(IRepository<Employee> repo)
{
_employees = repo;
}
[Route("")]
public IEnumerable<Employee> GetEmployees()
{
return _employees.Queryable();
}
[Route("{id}")]
public Employee GetEmployee(int id)
{
return _employees.Queryable().FirstOrDefault();
}
}
或在以下示例中,我们依赖于已定义的路由而不是使用属性路由。
public class EmployeeController : ApiController
{
private readonly IRepository<Employee> _employees;
public EmployeeController(IRepository<Employee> repo)
{
_employees = repo;
}
public IEnumerable<Employee> GetEmployees()
{
return _employees.Queryable();
}
public Employee GetEmployee(int id)
{
return _employees.Queryable().FirstOrDefault();
}
}
如果混搭,就会使事情变得混乱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.