看起来MapDelete是希望传递一个ID,但我的情况是,我需要传递一对ID.我以为传递一个JSON对象内容会起作用,但事实并非如此.让POST充当DELETE可以起作用,但它必须有不同的路径. 下面是我的代码,结果是the request matched multiple endpoints.

 app.MapPost("/movies/achievements", async (CreateMovieAchievementCommand cmd, ISender sender) =>
 {
     var id = await sender.Send(cmd);
     return TypedResults.Created("/movies/achievements", id);
 });
 app.MapPost("/movies/achievements", async (RemoveMovieAchievementCommand cmd, ISender sender) =>
 {
     await sender.Send(cmd);
     return TypedResults.Ok();
 });

我想改变最后一个要么MapDelete或一些如何使2个职位足够不同,它不会导致歧义(希望保持网址相同,如果可能的话)

RemoveMovieAchievementCommand等于AchievementIdMovieId

推荐答案

您已经定义了两个相同的终结点.将RemoveMovieAchievementCommand改为删除,这在REST API范例中更加惯用(请注意,需要显式FromBodyAttribute):

app.MapDelete("/movies/achievements",
    async ([FromBody] RemoveMovieAchievementCommand cmd, ISender sender) =>
    {
        await sender.Send(cmd);
        return TypedResults.Ok();
    });

此外,通常您只需要id即可删除,因此您可以执行如下操作:

app.MapDelete("/movies/achievements/{id}", async (idType id, ISender sender) =>
{
    await sender.Send(new RemoveMovieAchievementCommand {Id = id});
    return TypedResults.Ok();
});

RemoveMovieAchievementCommand等于AchievementIdMovieId

我认为,更多的RESTFull方法将转移到请求路径:

app.MapDelete("/movies/{movieId}/achievements/{achievementId}",
    async (MovieIdType movieId, AchievementIdType achievementId, ISender sender) =>
    {
        await sender.Send(new RemoveMovieAchievementCommand
        {
            AchievementId = achievementId,
            MovieId = movieId
        });
        return TypedResults.Ok();
    });

另请参阅:

Csharp相关问答推荐

react 式扩展连接中的非交叉LeftDurationTimeout

迭代C#List并在数据库中 for each 元素执行SELECT语句—更有效的方式?

C#XmlSerializer-输出控制新行的多个XML片段

Quartz调度程序不调用作业(job)类

如何忽略API JSON响应中的空字符串?

C#普罗米修斯指标

如何将字符串变量传递给JObject C#-无法加载文件或程序集';System.Text.Json

如何向事件添加成员

TagHelpers在新区域不起作用

委托RequestDelegate不带2个参数-ASP.NET Core 8最小API

异步任务调用程序集

在implementationFactory中避免循环依赖

Azure Functions v4中的Serilog控制台主题

我找不到ASP.NET Web应用程序(.NET框架).已 Select .NET框架项目和项模板以及此组件(&Q;)

EF Core:如何对关系属性进行建模?

如何使用实体框架核心对字符串_agg使用强制转换为varchar(Max)

仅在Blazor Web App中覆盖生产的基本路径(.NET8中的_Hosts.cshtml文件功能?)

Xamarin中出错.表单:应用程序的分部声明不能指定不同的基类

如何根据分割文本的块数来计算文本的大小?

在Swagger中显示自定义属性的属性名称