javascript - .NET Core Web API 路由和 GET 请求

标签 javascript c# angular .net-core asp.net-core-webapi

我有以下 Controller (.NET Core Web API 应用程序) (Source 包含多个 Site)

SitesController.cs

// GET: api/sites
[HttpGet]
public IDictionary<int, Site> GetSites() {
    return _db.Sites.ToDictionary(s => s.SiteId, s => s);
}

// GET: api/sites?source=5
[HttpGet("{source}")]
public IDictionary<int, Site> GetSites([FromRoute] int source) {
    return _db.Sites.Where(s => s.SourceId == source).ToDictionary(s => s.SiteId, s => s);
}

// GET: api/sites/5
[HttpGet("{id}")]
public async Task<IActionResult> GetSite([FromRoute] int id) {

Angular客户端仅从Source询问Site时,我得到了所有站点,具有的功能int source param 没有被调用...为什么?

findAllSourceSites(sourceId: number): Observable<Site[]> {
    return this.http.get(`${this.API_URL}/api/sites`, {
        params: new HttpParams()
            .set('source', sourceId.toString())
    }).pipe(
        map(res => {
            return Object.values(res);
        })
    );
}

enter image description here

最佳答案

很确定这是因为 [FromRoute] 的缘故,您的 URL 应该是 /api/sites/1HttpParams 正在设置查询字符串,现在您的 URL 看起来像 /api/sites?source=1

如果您想使用查询字符串,您应该将 Controller 更改为[FromQuery]

编辑: 由于AmbigouslyActionException:多个操作匹配。替代解决方案将两者结合在一起。

[HttpGet] 
public IDictionary<int, Site> GetSites([FromQuery] int? source) {
    if (source.HasValue) {
        // get specific 
    } else {
        // get all
    }
}

关于javascript - .NET Core Web API 路由和 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53230811/

相关文章:

javascript - 如何使用 javascript 滚动到列表组项目

javascript - 如何在js和css3中实现鼠标点击滚动图片

c# - 静态方法中的 ASP.NET MVC 访问配置

c# - 在 C# 中等待 C++ 中的事件 - 作为任务或等待句柄

c# - C# 如何知道何时运行静态构造函数?

javascript - 如何在 Angular 2中加载路线时显示运行进度条?

javascript - VS Code 中的 Intellisense - 当前建议

javascript - 使用 fabric.js 在 Canvas 中加载 JSON

html - bootstrap 不会仅在一页中对齐

javascript - Jasmine 的错误方法http测试( Angular 7)