我正在.NET框架中制作一个API。
我有一个名为Autos的控制器,API旨在允许注册和检索汽车模型。
起初,我能够使用GET从Postman获取List的IEnumerable
实例。我得到了一个用伪数据制作的列表的序列化版本。
然而,在我删除了伪列表,将方法更改为HttpResponseMessage
,并切换到我将用作存储库的静态字典后,该方法在使用Postman调用时停止执行。我添加了日志消息和断点,我可以看到它们永远不会执行。
我的控制器:
public class AutosController : ApiController
{
[HttpGet]
public HttpResponseMessage GetModels(HttpRequestMessage request)
{
//Theres a breakpoint here
System.Diagnostics.Debug.WriteLine(Repository.AutoRepository.Keys);
return request.CreateResponse<IEnumerable<Auto>>(HttpStatusCode.OK, Repository.AutoRepository.Values);
}
[HttpPost]
public HttpResponseMessage SetModel(HttpRequestMessage request, Auto serializedAuto)
{
if (serializedAuto.IsValid())
{
if (Repository.AddToRepository(serializedAuto))
return request.CreateResponse<Auto>(HttpStatusCode.Created, Repository.AutoRepository[serializedAuto.Id]);
else
return request.CreateResponse(HttpStatusCode.BadRequest);
} else
{
return request.CreateResponse(HttpStatusCode.BadRequest);
}
}
}
我的API路线
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/v1/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我可以成功地使用SetModel,并且我可以确认发送的模型也已添加到存储库中。我也可以把它还给邮递员。
我用于GET的邮递员地址是
localhost:51020/api/v1/GetModels
在我看来,你的行为可能是
[Route("~/api/v1/GetModels")]
public IEnumerable<Auto> GetModels()
{
var values = Repository.AutoRepository.Values;
if (values==null) throw new HttpException(404, "Some description");
return values;
}