2012-09-02 15 views
43

MVC4 webapi beta'yı RC'ye güncellememden bu yana problemlerle ilgili yardım isteyen bir kaç soru daha yaptım. Şimdilik en çok şey aldım, ama şimdi bunun nedenini anlayamıyorum.POST alan basit kontrol cihazı bulunamadı

Bu basit denetleyici için bir POST ve GET kabul eden bir tane var. Bir HTML formundan istek göndererek bunları çalıştırmayı denediğimde, POST biri aşağıdaki hatayı döndürürken yalnızca GET denetleyicisi bulunur.

{ 
    "Message": "No HTTP resource was found that matches the request URI 'http://localhost/webapi/api/play/test'.", 
    "MessageDetail": "No action was found on the controller 'Play' that matches the name 'test'." 
} 

POST denetleyicisi neden bulunamadı? Eğer "basit" değerleri göndermek istediğinizde

Kontrolörler

public class PlayController : ApiController 
{ 
    [HttpPost] // not found 
    public string Test(string output) 
    { 
     return output; 
    } 

    [HttpGet] // works 
    public string Test2(string output) 
    { 
     return output; 
    } 
} 

HTML formu

<form action="http://localhost/webapi/api/play/test" method="post"> 
<input type="text" name="output" /> 
<input type="submit" name="submit" /> 
</form> 

<form action="http://localhost/webapi/api/play/test2" method="get"> 
<input type="text" name="output" /> 
<input type="submit" name="submit" /> 
</form> 

cevap

87

Web.API biraz seçici.

Sen değer URL'den ama yayınlanmıştır verilerden gelmiyor uyarıyı kaldırmak için [FromBody] özellik kullanmak gerekir: artık 404 almazsınız Bu değişiklikle birlikte

[HttpPost] 
public string Test([FromBody] string output) 
{ 
    return output; 
} 

ama output hep olacak Web.Api special format gönderilmiş değerleri requries çünkü null, (gönderme Basit Türleri bölümüne bakın):

İkinci istemci aşağıdaki biçimde değerini göndermesi gerekir:

=value

Basitçe, ad/değer çiftinin ad bölümü basit bir tür için boş olmalıdır. Değil>

Yani bir model tipini oluşturması gerektiğini tavsiye ... tüm tarayıcılar HTML formları, için buna destek ama senaryodaki bu biçim oluşturur:

public class MyModel 
{ 
    public string Output { get; set; } 
} 

[HttpPost] 
public string Test(MyModel model) 
{ 
    return model.Output; 
} 

Sonra birlikte çalışacaktır senin Görüşlerinizi değiştirmeden örneklerden örnekler.

+3

3 yıl sonra chime yapabilirim, teşekkür ederim! Bu, sadece saatlerce uğraştığım bir sorunu çözdü. Bu tam olarak ne demek oluyor. –

+0

WebApiConfig.cs ile denetleyicideki yordam arasında bir parametre adı uyuşmazlığı olduğunda aynı hatayı aldım. –