实现新方法后,我的 api 方法将无法运行

本文关键字:运行 方法 api 新方法 我的 实现 | 更新日期: 2023-09-27 17:56:49

public class ContactsController : ApiController
{
    static readonly IContactsRepository repository = new ContactsRepository();
    //
    // GET: /Contacts/
    public IEnumerable<Contact> GetAllContacts()
    {
        return repository.GetAll();
    }
}

上面的代码适用于 API 调用/api/contacts/GetAllContacts,并从我的数据库中返回联系人列表。我还想添加一个使用/api/contacts/getcontacts 之类的东西返回特定联系人的方法?但是,一旦我添加了以下代码:

public Contacts GetContact(int id)
{
    Contacts item = repository.Get(id);
    if (item == null)
    {
        throw new HttpResponseException(HttpStatusCode.NotFound);
    }
    return item;
}

我的原始调用(/api/contacts/GetAllContact)将不起作用,并显示以下错误:

"Message": "The request is invalid.",
"MessageDetail": "The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'ReservationsAPI.Models.Contacts GetContact(Int32)' in 'ReservationsAPI.Controllers.ContactsController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."

编辑:路由配置

{
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}
}

实现新方法后,我的 api 方法将无法运行

删除您手动创建的 ContactS 类并尝试此操作;

public class ContactController : ApiController
{
    static readonly IContactsRepository repository = new ContactsRepository();
    // GET api/Contact
    public IEnumerable<Contact> GetContact()
    {
        return repository.GetAll();
    }
    // GET api/Contact/5
    public IHttpActionResult GetContact(int id)
    {
        var contact = repository.Get(id);
        if (contact == null)
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
        return contact;
    }

然后尝试调用这些网址;

/api/Contact
/api/Contact/1

使用此设置,您无需在工艺路线中定义操作。