![](/img/trans.png)
[英]How to add custom routes in ASP.NET Core MVC for Identity?
[英]How can add separate default routes for GET and POST requests in ASP.NET Core 2.0 MVC?
目前我的Startup.cs类中有以下内容:
app.UseMvc(routes =>
{
routes.MapRoute("default", "api/{controller}/{action=Get}");
});
我的所有MVC控制器都有一个方法Get on them,其中一些也有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请求重定向到控制器Post方法。 问题是,如果我在当前状态下这样做,HTTP POST请求将最终发布到/api/Example/Get
。
我已经研究过MapGet
和MapPost
,但是这些的唯一实现我可以发现管道短路,处理和响应在RequestDelegate中传递。 我的控制器方法永远不会达到这种方式。
我怎样才能做到这一点?
编辑
它可能值得添加,一些控制器在api/controller/action
上有额外的GET和POST方法,这意味着我需要在某处指定{action}
的路由。 但是这样做意味着我的默认Get和Post方法不再仅仅通过控制器名称访问,因此在MapRoute中添加=Get
作为默认操作
当然,每个请求都将使用Get
方法,因为您告诉它将其默认为:
routes.MapRoute("default", "api/{controller}/{action=Get}");
如果指定文字段(操作令牌),即/api/example/get
,则MVC将其视为啄食顺序中的最高级别。 这就是为什么它总是在你的控制器中选择Get
动作,因为你已经在url中指定了动作令牌。
不要用web api做到这一点!
相反,web api使用HttpVerb
来映射路由。 所以你不应该指定HttpVerb
和Url。 您提供HttpVerb
作为方法类型以及请求。
将api路由视为标识资源/资源集合。 它与你对MVC(RPC风格)的看法不同。
改为这些并尝试一下:
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()
{ ... }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.