Web Api属性路由无法正常工作

时间:2017-05-19 23:09:11

标签: c# web-services routes

我有一个使用owin管道的web api。我只使用属性路由。我有3个控制器,每个控制器都有几条路线。所有的路线都没有。

ContactsController

[RoutePrefix("accounts/{accountNumber}/contacts")]
public class ContactsController : ApiController
{
    [HttpGet]
    [Route("")]
    [Route("{contactId}")]
    public async Task<IHttpActionResult> GetContactsAsync(
        string accountNumber, 
        int? contactId = null);

    [HttpPut]
    [Route("{contactId}")]
    public async Task<IHttpActionResult> UpdateContactsAsync(
        [FromBody] UpdateContactsRequest request,
        string accountNumber,
        int contactId)
}

获取:http://localhost/accounts/1/contacts - 工作
GET:http://localhost/accounts/1/contacts/1 - 工作
PUT:http://localhost/accounts/1/contacts/1 - 不工作

我在PUT上获得了404。它找不到路线。

我也在我的PUT上尝试了以下路线:

[Route("/accounts/{accountNumber}/contacts/{contactId}")]
[Route("~/accounts/{accountNumber}/contacts/{contactId}")]

我也试过以各种方式重新排列参数。

更新1:邮递员电话 postman

更新2:请求对象

public class UpdateContactsRequest
{
    public int Id { get; set; }
    public Address Address { get; set; }
    public string PrimaryPhoneNumber { get; set; }
    public string AlternatePhoneNumber { get; set; }
    public string FaxNumber { get; set; }
    public string EmailAddress { get; set; }
}

public class Address
{
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string PostalCode { get; set; }
}

1 个答案:

答案 0 :(得分:0)

该问题最终成为web.config配置问题。

我错过了一个system.webServer配置部分。我添加了该部分,并从另一个web.config中复制了以下内容:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <remove name="OPTIONSVerbHandler" />
        <remove name="TRACEVerbHandler" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

现在一切顺利,它找到了我的PUT路线。