我有一个Blazor网络应用程序(自动),从数据库在客户端提取项目. 我已经创建了服务和控制器来获取所有有效的项,但当我try 搜索特定项时,它中断了,我收到以下错误:

crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
      Unhandled exception rendering component: Response status code does not indicate success: 500 (Internal Server Error).
System.Net.Http.HttpRequestException: Response status code does not indicate success: 500 (Internal Server Error).
   at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   at System.Net.Http.Json.HttpClientJsonExtensions.<<FromJsonAsyncCore>g__Core|12_0>d`2[[System.Collections.Generic.List`1[[Design_A_Bear.Models.Item, Design_A_Bear.Models, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Text.Json.JsonSerializerOptions, System.Text.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]].MoveNext()
   at Design_A_Bear.Services.ClientItemService.GetItemsByCategory(String category) in C:\Users\User\source\repos\Design_A_Bear_2.0\Design_A_Bear.Services\ClientItemService.cs:line 56
   at Design_A_Bear.Client.Pages.Items.Browse.OnInitializedAsync() in C:\Users\User\source\repos\Design_A_Bear_2.0\Design_A_Bear\Design_A_Bear.Client\Pages\Items\Browse.razor:line 49
   at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)

相关代码如下:

IItemService.CS:

Task<List<Item>> GetItemsByCategory(string category);

ItemService.CS:

public async Task<List<Item>> GetItemsByCategory(string category)
{
    List<Item>items = await _db.Items.Where(item => item.Category == category).ToListAsync();
    return items;
}

ClientItemService.cs

public async Task<List<Item>> GetItemsByCategory(string category)
{
    var result = await  _httpClient.GetFromJsonAsync<List<Item>>($"/api/Item/{category}");
    return result;
}

ItemController.cs

[HttpGet("{category}")]
public async Task<ActionResult> GetItemsByCategory(string category)
{
    var items = await _itemServices.GetItemsByCategory(category);
    return Ok(items);
}

最新情况: 这是我收到的错误:

An unhandled exception occurred while processing the request.
AmbiguousMatchException: The request matched multiple endpoints. Matches:

Design_A_Bear.Controllers.ItemController.GetItemsByCategory (Design_A_Bear)
Design_A_Bear.Controllers.ItemController.GetItemById (Design_A_Bear)

这是因为我有两个GET函数,它们接受一个参数.我怎么才能 Select 我想要的呢?


        public async Task<List<Item>> GetItemsByCategory(string category)
        {
            var result = await  _httpClient.GetFromJsonAsync<List<Item>>($"/api/Item/{category}");
            return result;
        }

        public async Task<Item> GetItemById(int id)
        {
            var result = await _httpClient.GetFromJsonAsync<Item>($"/api/Item/{id}");
            return result;
        }

推荐答案

要区分同一控制器上的两个GET端点,您需要向每个端点添加路由.

对于第一个端点

[Route("category/{category}")]

并且对于第二个端点

[Route("items/{id}")]

控制器方法上面的内容应该可以解决拥有两个GET端点的问题.

https://learn.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

Csharp相关问答推荐

使用变量子根名称在C#中重新初始化SON文件

如何创建ASP.NET Core主机并在同一进程中运行请求

EF Core 8—应用客户端投影后无法转换集操作

将委托传递到serviceccollection c#web API

. NET JSON属性自定义所需逻辑

Int和uint相乘得到LONG?

在允许溢出的情况下将小数转换为长

单行上的ReSharper数据标注

异步任务导致内存泄漏

Blazor Web App WASM的两个独立项目令人困惑

如何将端点(或с匹配请求并判断其路径)添加到BCL?

如何向事件添加成员

正在寻找新的.NET8 Blazor Web应用程序.如何将.js添加到.razor页面?

无法使用[FromForm]发送带有图像和JSON的多部分请求

如何在microsoft.clearscript.v8的jsondata中使用Linq

从Base64转换为不同的字符串返回相同的结果

如何使用.NET Aspire从Blazor应用程序与GRPC API通信?

RCL在毛伊岛应用程序和Blazor服务器应用程序.Net 8.0中使用页面

C#中COM对象的实际地址

如何提高C#中比较大 struct 的性能?