10

Web API Denetleyicilerini test ettiğim bir VS2012 MVC4 çözümüm var.Asp.Net MVC4 + Web API Denetleyici Silme isteği isteği >> 404 hatası

GET, POST, PUT başarıyla sınandım, ancak DELETE hala bana bir http 404 hatası verdi. Api denetleyicimde 'DeleteMovie' eylemimde bir kesme noktası belirlediğimde, kesme noktasına hiçbir zaman ulaşılamıyor.

Bu sorun hakkında çok fazla yazı okuyorum ancak kimse bana yardım etmedi. için

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

Benim yönlendirme:

<script type="text/javascript"> 

    deleteMovie(1, function() 
    { 
     alert("Movie deleted!"); 
    }); 

    function deleteMovie(id, callback) { 
     $.ajax({ 
      url: "/api/Movie", 
      data: JSON.stringify({ id: id }), 
      type: "DELETE", 
      contentType: "application/json;charset=utf-8", 
      statusCode: { 
       204: function() { 
        callback(); 
       } 
      } 
     }); 
    } 

</script> 

Benim klasik rota şu şekilde olmaktadır: Burada

[HttpDelete] 
    public HttpResponseMessage DeleteMovie(int id) 
    {  
     // Delete the movie from the database  
     // Return status code  
     return new HttpResponseMessage(HttpStatusCode.NoContent); 

    } 

benim html sayfası: Burada

SİL benim API Denetleyicisi'dir API aşağıdaki gibidir:

Benim çözüm özelliklerinde

, ben de 'Use Visual Studio Development Server' ama aynı sorunla çalıştı

işaretli 'Use IIS Express' ile 'Use yerel IIS Web sunucusunu' yapılandırın.

Herhangi bir fikrin var mı?

Teşekkürler.

+0

, aslında yayılan alır URL'yi yakalayabilir jQuery tarafından ve sane görünüyor görünüyor? –

cevap

16

HTTP DELETE'in gövdesi yok. Kimliği bir sorgu dizesi parametresi olarak iletmeniz gerekir.

+1

Teşekkürler. Haklısın! Buradaki bir blog gönderisinde kodu buldum: http://stephenwalther.com/archive/2012/03/05/introduction-to-the-asp-net-web-api.aspx Bu yüzden gerçekten Böyle bir problem! – Bronzato

33

aldığınız hata ııS'DEN bir html içerik türü, hata 404.0

Web Api şablon tarafından eklenen web.config bölümü var emin olun değilse. Varsayılan olarak, IIS DELETE fiilini sunmayacak ve bu yapılandırma davranışı geçersiz kılar.

<system.webServer> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 
+1

+1 MVC projesiyle başladım, ancak sadece WebAPI için bunu istiyordum. Bu yüzden MVC'ye özel bir yapılandırma olduğunu düşündükten sonra, DELETE isteklerim 404'dü. Teşekkürler. –

0

Russell cevap göre ben web config bir göz attım ve Sonuncusunu kaldırdık

.... 
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
<remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 

işleyicileri yönteminde iki satır bulundu ve işe yaradı. Eğer hata ayıklama araçlarını kullanmak durumunda

istemci üzerinde kullanım Sadece bir örnek (daktilo versiyonu) Tarayıcınızda

public deleteComment(commentId: number) { 
     var url = 'api/comments/' + commentId; 
     return this.$http.delete(url); 
    } 

ve sunucu tarafı

[Route("{id:int}")] 
    public async Task<IHttpActionResult> Delete(int id){ 
     await _snippetService.DeleteComment(id); 
     return Ok(); 
    } 
İlgili konular