我有三种方法的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();
}
答案 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并且有效。感谢大家帮助我找到你想出的答案,并且评论帮助我解决了这个问题。