我应该如何将params发送到Asp.Net WebAPI 2.1数据查询方法?

时间:2014-06-09 14:24:13

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

我一直在编码。有时会有一个,两个,三个或更多参数:

$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 param吗?

1 个答案:

答案 0 :(得分:1)

您应该能够通过

Retrieve方法定义方法访问名称

[HttpGet("Retrieve")]

并继续使用查询参数,就像您最初没有弄乱路线一样。

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