Ich habe eine Webapi-Controller-Klasse mit unterschiedlichen Maßnahmen, GET und PUT funktionieren gut, POST ist die ganze Zeit fehlgeschlagen und ich bin ziemlich frustriert. Vielleicht können Sie mir ein paar Tipps geben, wie ich dieses Problem lösen kann.C# Webapi POST Anfrage fehlgeschlagen - 404 nicht gefunden
Controller Aktion:
[RoutePrefix("api/v1/jobs")]
public class JobsController : ApiController
{
[ActionName("PostInactiveStatus")]
[System.Web.Http.AcceptVerbs("POST")]
[System.Web.Http.HttpPost]
public IHttpActionResult PostInactiveStatus(Job job)
{
CsJobSchedulerEntities dataContext = new CsJobSchedulerEntities();
try
{
var refJob = (from j in dataContext.Job
where j.JOB_ID == job.JOB_ID
select j).SingleOrDefault();
refJob.JOB_ACTIVE = 0;
refJob.JOB_MUSER = job.JOB_MUSER;
refJob.JOB_MDATE = DateTime.Now;
dataContext.SaveChanges();
var jobs = dataContext.Job.ToList();
return Ok(jobs);
}
catch (Exception ex)
{
return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, new HttpError(ex.Message)));
}
}
}
WebapiConfig Klasse:
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{key}",
defaults: new { key = RouteParameter.Optional }
);
//PAM: Add Default Message Handler when Content-Type is Empty
config.MessageHandlers.Add(new DefaultContentTypeMessageHandler());
//PAM: Web API configuration and services
EnableCrossSiteRequests(config);
}
private static void EnableCrossSiteRequests(HttpConfiguration config)
{
var cors = new EnableCorsAttribute(
origins: "*",
headers: "*",
methods: "*");
config.EnableCors(cors);
}
Client Request:
function removeJob(data) {
jQuery.support.cors = true;
$.ajax({
url: HOST + "api/v1/jobs/PostInactiveStatus",
type: "Post",
data: data,
async: false,
beforeSend: function() {
},
success: function (data) {
},
error: function (xhr, ajaxOptions, thrownError) {
}
});
}
}
Fehlermeldung:
"Message": "Nein HTTP-Ressource wurde gefunden, dass die Anforderungs-URI
http://localhost:59732/api/v1/jobs/PostInactiveStatus
übereinstimmt.", "MessageDetail": „Kein Typ gefunden wurde, die den Controller 'genannt Spiele v1 '. "
Wo ich versage?
UPDATE: Der Controller hat den RoutePrefix für die Versionierung der API hinzugefügt, da GET und PUT einwandfrei funktionieren.
Gut für eine basierend auf Route Vorlage gibt es keine v1. Wie lautet der Name des Controllers, der die obige Aktion – Nkosi