Bir ASP.NET Web API projede bir denetleyicisinde aşağıdaki eylem yöntemleri var: nedeniyle bir javascript hataASP.NET Web Api 200 Tamam döndürür 404
[Route("api/v2/project/{projectId}/stuff"), HttpGet]
public IHttpActionResult Get(int projectId)
[Route("api/v2/project/{projectId}/stuff/{id:guid}"), HttpGet]
public IHttpActionResult Get(int projectId, [FromUri] Guid id)
[Route("api/v2/project/{projectId}/stuff"), HttpPost]
public IHttpActionResult Post(int projectId, [Required] Stuff stuff)
[Route("api/v2/project/{projectId}/stuff/{id:guid}"), HttpPut]
public IHttpActionResult Put(int projectId, [FromUri] Guid blastId, Stuff stuff)
[Route("api/v2/project/{projectId}/stuff/{id:guid}"), HttpDelete]
public IHttpActionResult Delete(int projectId, [FromUri] Guid id)
, yaptığım bir kimliği için
api/v2/project/1234/stuff/undefined
yani yerine bir GUID
için DELETE
istek, ben dize "undefined"
var. Anlayabildiğim kadarıyla, bu benim rotalarımın hiçbiri ile eşleşmemeli, ancak(veya 405 Method not allowed
) yerine yanıt olarak bir 200 OK
aldım.
Bu eylem yöntemlerinin her birinde bir kesme noktası belirledim ve Fiddler'ı kullanarak isteği yineledim, ancak kesme noktalarının hiçbiri vurulmadı. WebApiRouteDebugger paketini nuget'ten yüklemeyi de denedim, ancak DI kapsayıcımızla bir şeyler yapan özel bir denetleyici fabrikası kullanıyoruz, bu yüzden hiç işe yaramayabilirdim. (Geçerli URL'lerin gereken başka istek yapmak gibi)
throw new Exception(actionContext.ControllerContext.ControllerDescriptor.ControllerName +
" " + actionContext.ActionDescriptor.ActionName);
ama DELETE
istek hala200 OK
için geçer: Ben bile küresel kayıtlı filtrelerden birini aşağıdaki durum atma çalıştı.
Bunu başka nasıl giderebilirim? Kök sebep ne olabilir? senin Global.asax.cs yılında
Yeni Web APi projesi oluşturdum ve yöntemleriniz ile denetleyici ekledim ve testler için yönlendirme yaptım. Maalesef iyi çalışıyor. Url 'api/v2/project/{proje kimliği}/stuff/{id: guid}' 404 hatam var. Ben diğer denetleyicide yanlış yönlendirme veya "tanımsız" ile başka bir yol için eşleşmeleri ile sorun olduğunu düşünüyorum. –
@BartoszCzerwonka: Bunu yapmak için zaman ayırdığınız için çok teşekkürler. Proje büyüktür, bu yüzden tüm rotaları tüm projeye dahil etmedim - ancak, dikkatli bir şekilde kontrol ettim ve projede hiçbir şey "api/v2/project/{ Bu denetleyicide hariç olmak üzere projectId}/stuff/ '. –
Ayrıca, bunlardan sadece bir tanesi 'DELETE 'isteklerini kabul etmesi gereken bir tane var - ve bu, herhangi bir kesme noktasının vurulmadığı nokta. –