Lassen Sie uns ein Testmodell haben.Unterstützung von GET * und * POST in WebApi
public class TestRequestModel
{
public string Text { get; set; }
public int Number { get; set; }
}
Ich würde diesen Service gerne in der Lage sein, die folgenden Anforderungen zu akzeptieren:
- GET/Prüfnummer = 1234 & Text = MyText
- POST/Test mit Kopf : Inhaltstyp: application/x-www-form-urlencoded und Körper: Nummer = 1234 & Text = MyText
- POST/Test mit Kopf: Content-Type: application/json und Körper: { "Text": "vorgesehen", "Nummer": 9876}
Die Routen
_config.Routes.MapHttpRoute(
"DefaultPost", "/{controller}/{action}",
new { action = "Post" },
new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) });
_config.Routes.MapHttpRoute(
"The rest", "/{controller}/{action}",
defaults: new { action = "Get" });
Mein Controller sieht wie folgt aus:
public class TestController : ApiController
{
[HttpGet]
public TestResponseModel Get([FromUri] TestRequestModel model)
{
return Do(model);
}
[HttpPost]
public TestResponseModel Post([FromBody] TestRequestModel model)
{
return Do(model);
}
(...)
die folgende Art und Weise konfiguriert sind,
Das scheint eine akzeptable Menge an Kesselblech-Code zu sein, aber ich möchte es nach Möglichkeit vermeiden.
Die zusätzliche Route ist auch nicht ideal. Ich habe Angst vor MVC/WebAPi Routen und ich glaube, dass sie böse sind.
Gibt es eine Möglichkeit, zwei Methoden und/oder die DefaultPost Route zu vermeiden?
Ich denke, Sie haben zu viel Code hinzugefügt, schauen Sie sich das Standardprojekt an, das generiert wird. Sie brauchen nicht Ihre Attribute oder spezielle Routen, um das zu tun, was Sie tun.Auch die verschiedenen Verben bezeichnen unterschiedliche Intensionen, "GET" ist für den Zugriff auf Daten gedacht, während "POST" für die Erzeugung neuer Daten gedacht ist. – Matthew