Jquery 未找到来自属性路由的路由
我有一个Web API(v>2.0)Web服务,其中的控制器不完全响应我的ajax请求 这是控制器Jquery 未找到来自属性路由的路由,jquery,asp.net,ajax,asp.net-web-api,Jquery,Asp.net,Ajax,Asp.net Web Api,我有一个Web API(v>2.0)Web服务,其中的控制器不完全响应我的ajax请求 这是控制器 public class MyController : ApiController { [Route("api/object")] //working public string Method1(string param) { return JsonConvert.SerializeObject(Service.GetBy(param)); }
public class MyController : ApiController
{
[Route("api/object")] //working
public string Method1(string param)
{
return JsonConvert.SerializeObject(Service.GetBy(param));
}
[Route("api/object")] //not working
[HttpPost]
public void Method2(string param)
{
Service.Insert(JsonConvert.DeserializeObject<MyObject>(param));
}
}
GET
方法有效,但是POST
方法无效,它返回代码404
有趣的是,在我提交POST请求之前,两个步骤中的同一个页面调用同一个页面来检索JSONified MyObject,这是可以预期的
我已经在webservice Web.Config和ajax调用中配置了CORS,如何使其正常工作?根据您使用json的代码示例判断,请记住将ajax调用更改为:
$.ajax({
url : 'http://localhost/api/object',
type : 'POST',
contentType : 'application/json',
data : JSON.stringify(/* my object */)
success : successHandler,
error : errorHandler
});
contentType
告诉web端点您正在发送一条http消息,消息正文中的内容是json。您不需要将消息数据包装到对象中,因为您正在发送一个json字符串,该字符串将是类似于MyObject
class stringyfied的javascript对象
然后将控制器操作更改为:
public class MyController : ApiController
{
[HttpGet]
[Route("api/object")] //working
public string Method1(string param)
{
return JsonConvert.SerializeObject(Service.GetBy(param));
}
[Route("api/object")] //this will work
[HttpPost]
public void Method2([FromBody]MyObject param)
{
Service.Insert(param);
}
}
WebApi知道如何处理json,并将消息体内容反序列化为您的模型类型 当你说它不起作用时,你从请求中得到了什么状态码?还有,为什么要发送序列化的JSON字符串呢?只需发送带有标准参数的请求,并让模型活页夹为您工作。使用返回进行编辑code@fra9001没问题,伙计,很高兴我能帮忙:)
public class MyController : ApiController
{
[HttpGet]
[Route("api/object")] //working
public string Method1(string param)
{
return JsonConvert.SerializeObject(Service.GetBy(param));
}
[Route("api/object")] //this will work
[HttpPost]
public void Method2([FromBody]MyObject param)
{
Service.Insert(param);
}
}