gpt4 book ai didi

c# - 如何在 ASP.NET Core 中结合基于模板和属性的路由?

转载 作者:行者123 更新时间:2023-12-03 21:36:13 26 4
gpt4 key购买 nike

我需要为 Controller 定义基于模板的路由,然后在 ASP.NET Core 中定义基于属性的操作。就像是:

public class Foo : Controller
{
[HttpGet]
public object Get()
{
return new
{
ID = "A"
};
}

[HttpPost]
public object Create([FromBody]dynamic entity)
{
return new
{
ID = "B"
};
}


}

路线
app.UseMvc(routes =>
{
routes.MapRoute("Settings", "settings/api/foo",
new { controller = "Foo" }
);
});

我希望这能奏效:
GET /settings/api/foo
POST /settings/api/foo

不幸的是,这不是一个案例。看起来路由属性被忽略了。达到要求的最佳方法是什么?

最佳答案

这里的技巧是将 URL 路由到特定的 Controller 和操作。然后使用 Action 方法重载和 Action 方法选择器在 GET 和 POST 之间切换。

将您的路线设置代码更改为:

app.UseMvc(routes =>
{
routes.MapRoute(
"Settings",
"settings/api/foo",
new {
controller = "Foo", // specific controller
action = "DoThing", // AND specific action
}
);
});

并将 Controller 更改为具有相同的名称,但使用不同的操作方法选择器(或您想要的任意多个 - 每个 HTTP 动词一个)具有相同的名称:
public class FooController : Controller
{
[HttpGet] // different action method selector!
public object DoThing() // same name!
{
return new
{
ID = "A"
};
}

[HttpPost] // different action method selector!
public object DoThing([FromBody]dynamic entity) // same name!
{
return new
{
ID = "B"
};
}
}

这样,MVC 会将对该 URL 的所有请求路由到名为 DoThing 的操作。在 Controller 上 Foo .一旦它到达那里,它就会看到“哦,天哪,天哪,有两个同名的 Action !”但随后它看到了 [HttpGet][HttpPost] Action 方法选择器,无论哪一个说它可以处理请求都将获胜。

关于c# - 如何在 ASP.NET Core 中结合基于模板和属性的路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35563609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com