gpt4 book ai didi

c# - 如何在 ASP.NET Core 2.0 MVC 中为 GET 和 POST 请求添加单独的默认路由?

转载 作者:太空狗 更新时间:2023-10-29 23:28:48 26 4
gpt4 key购买 nike

目前我的 Startup.cs 类中有以下内容:

app.UseMvc(routes =>
{
routes.MapRoute("default", "api/{controller}/{action=Get}");
});

我所有的 MVC Controller 都有一个 Get 方法,其中一些也有一个 Post 方法。像这样:

public class ExampleController : Controller
{
[HttpGet]
public MyType Get()
{
return GetMyTypeFromSomewhere();
}

[HttpPost("api/[controller]")]
public void Post([FromBody]MyType updated)
{
//do some stuff with the new instance
}
}

目前我需要在 Post 方法上使用 ("api/[controller]") 以便发布请求能够到达它。

我希望能够删除它并默认将 POST 请求重定向到 Controller Post 方法。问题是,如果我在当前状态下这样做,HTTP POST 请求将最终发布到 /api/Example/Get

我已经研究过 MapGetMapPost,但我能找到的唯一实现是使管道短路,在传递的 RequestDelegate 中处理和响应。我的 Controller 方法永远不会以这种方式到达。

我怎样才能做到这一点?

编辑

可能值得添加,一些 Controller 有额外的 GET 和 POST 方法,这些方法在 api/controller/action 处达到,这意味着我需要有一个到 {action 的路由} 在某处指定。然而,这样做意味着我的默认 Get 和 Post 方法不再只能通过 Controller 名称访问,因此将 =Get 添加为 MapRoute 中的默认操作

最佳答案

当然,每个请求都会使用 Get 方法,因为您告诉它默认为:

routes.MapRoute("default", "api/{controller}/{action=Get}");

如果您指定文字段(操作标记),即 /api/example/get,MVC 会将其视为优先顺序中的最顶层。这就是为什么它总是在您的 Controller 中选择 Get 操作,因为您已经在 url 中指定了操作 token 。

不要用 web api 这样做!

相反,web api 使用 HttpVerb 来映射路由。因此,您不应将 HttpVerb 与 Url 一起指定。您改为提供 HttpVerb 作为方法类型以及请求。

将 api 路由视为标识资源/资源集合。它与您对 MVC(RPC 风格)的看法不同。

更改为这些并试一试:

启动.cs

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvcWithDefaultRoute();
}

客户资源

[Route("api/[controller]")]
public class CustomersController : Controller
{
[HttpGet]
public IActionResult Get()
{ ... }

[HttpPost]
public IActionResult Post()
{ ... }
}

关于c# - 如何在 ASP.NET Core 2.0 MVC 中为 GET 和 POST 请求添加单独的默认路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46694246/

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