我有一个使用owin管道的web api。我只使用属性路由。我有3个控制器,每个控制器都有几条路线。所有的路线都没有。
[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}")]
我也试过以各种方式重新排列参数。
更新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; }
}
答案 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路线。