【问题标题】:Route from attribute routing not found未找到来自属性路由的路由
【发布时间】:2015-10-22 21:31:35
【问题描述】:

我有一个 Web API (v >2.0) 网络服务,其控制器不完全响应我的 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,并且按预期工作

我在 webservice Web.Config 和 ajax 调用中都配置了 CORS,我怎样才能让它正常工作?

【问题讨论】:

  • 当你说它不起作用时,你从请求中得到什么状态码?另外,为什么还要发送一个序列化的 JSON 字符串呢?只需发送带有标准参数的请求,让模型绑定器为您工作。
  • 用返回码编辑

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


【解决方案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 并将消息体内容反序列化为您的模型类型。

【讨论】:

  • @fra9001 没问题,哥们,很高兴我能帮上忙 :)
猜你喜欢
  • 2017-08-16
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多