【问题标题】:How should I send params to a Asp.Net WebAPI 2.1 data query method?我应该如何将参数发送到 Asp.Net WebAPI 2.1 数据查询方法?
【发布时间】:2014-06-09 14:24:12
【问题描述】:

我一直是这样编码的。有时有一个、两个、三个或更多参数:

$http({ url: '/api/Topic/Retrieve',
    method: "GET",
    params: {
       subjectId: sub
    }
})

结果是这样的,所有查询参数都作为查询字符串的一部分:

GET /api/Topic/Retrieve?subjectId=1 HTTP/1.1

我的 WebAPI 控制器如下所示:

    [HttpGet]
    public async Task<IHttpActionResult> Retrieve(int subjectId)
    {
        var topics = await db.Topics
            .Include(q => q.SubTopics)
            .Where(q => q.SubjectId == subjectId)
            .ToListAsync();
        return Ok(topics);
    }

这可行,但现在我正在设置 Asp.Net 属性路由装饰,当我使用查询字符串传递数据时,没有简单的方法可以做到这一点。那么如果有一个、两个或三个参数,我应该执行以下操作吗?

GET /api/Topic/1 HTTP/1.1
GET /api/Topic/1/2 HTTP/1.1
GET /api/Topic/1/2/abcd HTTP/1.1

或者或者我应该编码参数in the body,然后在Asp.Net方法的参数之前使用:[FromBody]?还有一个问题。如果我在正文中对参数进行编码,那么我将如何使用 AngularJS 来做到这一点。我应该在 $http 调用中使用 data 参数吗?

【问题讨论】:

    标签: asp.net asp.net-mvc angularjs asp.net-web-api


    【解决方案1】:

    您应该能够为您的Retrieve 方法定义方法访问名称

    [HttpGet("Retrieve")]

    并像原来一样继续使用查询参数,而不会弄乱路由。

    (类似于这个答案:Web API 2 / MVC 5 : Attribute Routing passing parameters as querystring to target different actions on same controller

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      相关资源
      最近更新 更多