the resource requested not found error encontrado directorio detallado asp archivo asp.net-web-api

asp.net web api - resource - ¿Por qué recibo una respuesta 404 de mi POST en la api web?



iis http 404 (2)

Tengo la siguiente acción en mi controlador web api:

// POST api/<controller> [AllowAnonymous] [HttpPost] public bool Post(string user, string password) { return true; }

Recibo el siguiente error con un estado 404 al golpearlo con fiddler o con un script de prueba de jQuery:

{"Mensaje": "No se encontró ningún recurso HTTP que coincida con el URI de solicitud '' http://localhost/amsi-v8.0.0/api/account ''.", "MessageDetail": "No se encontró ninguna acción en la cuenta del controlador '' ''que coincide con la solicitud. "}

Mi ruta http es la siguiente:

RouteTable.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );

Consigue trabajar bien. Encontré otra pregunta aquí que habla sobre la eliminación de WebDAV de IIS. Intenté eso, sigue siendo el mismo problema.

¿Por qué obtengo un 404?


Cuando publicamos un json, esperamos una clase, así que cree una clase en una carpeta modelo como esta

public class Credential { public string username { get; set; } public string password { get;set; } }

y ahora cambia el parámetro

[HttpPost] public bool Post(Credential credential) { return true; }

Prueba ahora todo funcionará sin problemas


El comportamiento de selección de acciones predeterminado en ASP.NET Web API también se preocupa por los parámetros de su método de acción. Si son objetos de tipo simple y no son opcionales, deberá proporcionarlos para invocar ese método de acción en particular. En su caso, debe enviar una solicitud contra un URI como se muestra a continuación:

/ api / account? user = Foo & password = bar

Si desea obtener estos valores dentro del cuerpo de la solicitud en lugar de la cadena de consulta (que es una mejor idea), simplemente cree un objeto Usuario y envíe la solicitud en consecuencia:

public class User { public string Name {get;set;} public string Password {get;set;} }

Solicitud:

POST http: // localhost: 8181 / api / account HTTP / 1.1

Tipo de contenido: aplicación / json

Anfitrión: localhost: 8181

Contenido-Longitud: 33

{"Nombre": "foo", "Contraseña": "barra"}

Y tu método de acción debería verse como algo abajo:

public HttpResponseMessage Post(User user) { //do what u need to do here //return back the proper response. //e.g: If you have created something, return back 201 return new HttpResponseMessage(HttpStatusCode.Created); }