控制器上没有找到任何操作' Depts'与请求匹配。 webApi C#.NET

时间:2014-10-31 16:04:14

标签: c# asp.net-mvc-4 asp.net-web-api

我有三种方法的web api,它在一周之前运行得非常好,但我不明白为什么它现在没有运行。我正在尝试从最近3天开始,拼命寻求帮助。

在浏览器上测试时 /api/Depts/Get/ /api/Depts/GetDeptById/2

工作正常但经过测试 api/Depts/GetDeptByCompany/'abc'

抛出错误未在与请求匹配的控制器'Attorneys'上找到任何操作。 webApi C#.NET

weapi.Config文件

namespace Test_Dept
{
  public static class WebApiConfig
  {
    public static void Register(HttpConfiguration config)
    {
        //// Attribute routing
        //config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
          routeTemplate: "api/{controller}/{action}/{id}",
          // routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
     }
   }
}

控制器

namespace Test_Dept.Controllers
{
  public class DeptsController : ApiController
  {
    [HttpGet]
    public List<Dept> Get()
    {
        return DeptRepository.GetAllDepts();
    }
    [HttpGet]
            public Dept GetDeptById(int id)
    {
        Dept Att = DeptRepository.GetDeptById(id);
        if(Att==null)
           throw new HttpResponseException(HttpStatusCode.BadRequest);
        else
           return Att;
    }

    [HttpGet]
    public List<Dept> GetDeptByCompany(string company)
    {
        var Att = DeptRepository.GetDeptByCompany(company);
        if (Att.ToList().Count == 0)
            throw new HttpResponseException(HttpStatusCode.BadRequest);
        else
            return Att;
    }

存储库

namespace Test_Dept.Models
{
  public class DeptRepository
  {
    public static List<Dept> GetAllDepts()
    {
        DeptEntities dataContext = new DeptEntities();
        var query = from dept in dataContext.Depts select dept;
        return query.ToList();
    }
    public static Dept GetDeptById(int id)
    {
        DeptEntities dataContext = new DeptEntities();
        var query = (from dept in dataContext.Depts where Dept.ID == id select dept).SingleOrDefault();
        return query;
    }
    public static List<Dept> GetDeptByCompany(string company)
    {
        DeptEntities dataContext = new DeptEntities();
        var query = (from dept in dataContext.Depts where Dept.Company == company select Dept);
        return query.ToList();
    }

2 个答案:

答案 0 :(得分:0)

假设提及&#34;律师&#34;在你的问题是一个错字。路径中的参数名称需要与控制器操作中的参数名称匹配。您现有的路由仅适用于参数名称为id的控制器操作。如果您希望网址api/Depts/GetDeptByCompany/abc有效(请注意参数周围没有引号)。然后你可以添加一个路由,如

config.Routes.MapHttpRoute(
          name: "CompanyApi",
          routeTemplate: "api/{controller}/{action}/{company}");

如果您使用的是Web API 2,那么您可能更喜欢属性路由,并且您可以在控制器操作上执行以下操作。

[HttpGet]
[Route("api/{controller}/{action}/{company}")]
public List<Dept> GetDeptByCompany(string company)

答案 1 :(得分:0)

需要删除引号并测试web api方法 api / Depts / GetDeptByCompany?company = abc并且有效。感谢大家帮助我找到你想出的答案,并且评论帮助我解决了这个问题。