当我对这样的 Web API 发出 HTTP 请求时,为什么我得到All
而不是Single
结果:
我认为应该执行第二种方法,但执行第一种方法:
public IHttpActionResult GetCamps()
{
var camps = _context.CAMPs.ToList()
.Select(Mapper.Map<CAMP, CampDTO>);
return Ok(camps);
}
public IHttpActionResult GetCamp(int campCode)
{
var camp = _context.CAMPs
.SingleOrDefault(c => c.CAMP_CODE == campCode);
if (camp == null)
return NotFound();
return Ok(Mapper.Map<CAMP, CampDTO>(camp));
}
如果您在 Visual Studio 2017 中创建了一个全新的 ASP.Net(非核心)Web API 项目(我使用的是 15.8.0),这是以下的默认内容WebApiConfig.cs
:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace WebApplication1
{
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 }
);
}
}
}
你会注意到它有一个id
参数的映射,但没有这样的映射campCode
(希望这不是意外)。
您可以添加单独的路由或更改参数名称。或者campCode
作为查询字符串参数提供。
对于任何“为什么不调用方法 X 而不是方法 Y”,您应该意识到这始终是路由问题。Phil Haack 提供了一个方便的Route Debugger,您可以随时添加它并帮助试验/回答此类问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句