У меня есть класс контроллера webapi с разными действиями, GET и PUT работают нормально, POST не работает все время, и я очень расстроен. Может быть, вы можете дать мне несколько советов, как я могу решить эту проблему.C# запрос WebAPi POST не работает - 404 НЕ НАЙДЕН
Действие контроллера: класс
[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:
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) {
}
});
}
}
Сообщение об ошибке:
"Сообщение": "Ни один HTTP ресурс не был найден соответствующий запрос URI
http://localhost:59732/api/v1/jobs/PostInactiveStatus
.", "MessageDetail": «Ни один тип не был найден соответствующий контроллер с именем ' v1' .»
Где я провал?
UPDATE: Контроллер добавил RoutePrefix для управления версиями API, как указано, GET и PUT работают нормально.
Ну для одного на основе шаблона маршрута нет v1. Каково имя контроллера, который имеет вышеуказанное действие – Nkosi