繁体   English   中英

ASP.NET Web Api路由中断

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM