首页 > 解决方案 > 从 Postman 调用时未执行 API 方法

问题描述

我正在.NET Framework 中制作 API。

我有一个名为 Autos 的控制器,该 API 旨在允许注册和检索汽车模型。

起初,我能够使用 GETIEnumerable从 Postman 获取 List 的实例。我得到了我用虚拟数据制作的列表的序列化版本。

但是,在我删除了虚拟列表、更改方法返回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

标签: c#.netasp.net-web-apipostman

解决方案


在我看来,你的行动可能是

 [Route("~/api/v1/GetModels")]
public IEnumerable<Auto> GetModels()
  {

    var values = Repository.AutoRepository.Values;
    if (values==null) throw new HttpException(404, "Some description");
    return values;

}

推荐阅读