未找到属性路由的路由

时间:2015-07-31 09:02:10

标签: jquery asp.net ajax asp.net-web-api

我有一个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,如何使其正常工作?

1 个答案:

答案 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 ,并将消息正文内容反序列化为您的模型类型。