我有一个Web API(v> 2.0)webservice,其控制器不能完全响应我的ajax请求。
这是控制器
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));
}
}
我的ajax请求(通过jquery)是
$.ajax({
url : 'http://localhost/api/object',
type : 'POST',
data : { param : JSON.stringify(/* some stuff */) }
success : successHandler,
error : errorHandler
});
GET
方法有效,但POST
方法不起作用,并返回代码404.
值得注意的是,在我提交POST请求之前,两个步骤中的同一页面调用同一页面来检索JSONified MyObject,并且按预期工作
我已经在Web服务Web.Config和ajax调用中配置了CORS,如何使其正常工作?
答案 0 :(得分:1)
根据您的代码示例判断您正在使用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 字符串将是您的javascript对象,类似于MyObject
类stringyfied。
然后将控制器操作更改为:
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 ,并将消息正文内容反序列化为您的模型类型。