我有一个webapi控制器类与不同的行动,GET和PUT工作正常,POST是失败的整个时间,我很沮丧。也许你可以给我一些提示,告诉我如何解决这个问题。C#Webapi POST请求失败 - 404 NOT FOUND
控制器动作:
[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);
}
客户端请求:
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' 。”
我在哪里失败?
更新:控制器已经添加了RoutePrefix来版本化API,如上所述,GET和PUT工作正常。
对于基于路线模板的人来说,没有v1。具有上述动作的控制器的名称是什么? – Nkosi