Ich versuche, eine Post-Anfrage für die Arbeit mit der Web-API zu erhalten. Es folgt mein API-Controller.
public class WebsController : ApiController
{
[HttpPost]
public void PostOne(string id)
{
}
[HttpPost]
public void PostTwo(Temp id)
{
}
}
Ich habe die Webapi-Route geändert, um die Aktion zu berücksichtigen. Das Temp-Modell sieht ungefähr so aus.
public class Temp
{
public string Id { get; set; }
}
Meine Ansicht sieht ungefähr so aus
@using (Ajax.BeginForm(new AjaxOptions
{
Url = "/api/webs/postone",
HttpMethod = "post"
}))
{
<input name="id" id="id" value="2" />
<input type="submit" value="submit" />
}
Der obige Code funktioniert mit dem Postone überhaupt nicht, es sei denn, ich setze das Attribut [FromBody] wie folgt vor den Parameter.
[HttpPost]
public void PostOne([FromBody]string id)
{
}
dann trifft es die Aktion, aber die ID ist immer noch null. Es wird nicht mit dem Wert im Textfeld gefüllt.
Aber wenn ich das ändere Url
das Ajax.BeginForm
zu posttwo
dem nimmt das Modell Temp
, es funktioniert gut und das Id
Feld wird den richtigen Wert in der Textbox.
Kann mir bitte jemand den Grund dafür erklären und wie ich einen einfachen Wert für eine Web-API-Aktion veröffentlichen kann? Ich meine, warum kann es einen komplexen Typ binden, aber keinen einfachen Typ.