c# - 如何为具有不同参数的同一Controller方法设置不同的路由?

标签 c# asp.net asp.net-core routes

我的 ReportController 看起来像这样:

public IActionResult ReportDetails(int? reportId){
    ....
}

public IActionResult ReportDetails(int? reportId, bool ? approved) {
    ....
}

我尝试做一些路由,但失败了。在 Startup.cs 中编写的实际代码:

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "ReportDetailsValidation",
                    template: "descriptionValidation",
                    defaults: new { controller = "Report", action = "ReportDetails", reportId ="{reportId}", approved = "{approved}" }
                    );

                routes.MapRoute(
                    name: "ReportDetails",
                    template: "description",
                    defaults: new { controller = "Report", action = "ReportDetails"} 
                    );

                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

如我所见,我需要匹配以下 URL:
/Report/ReportDetails?reportId=7 对于第一个和
/Report/ReportDetails?reportId=7&approved=True 第二个

最佳答案

你可以使用 RouteAttribute

[Route("ReportDetails/{reportId}")]
public IActionResult ReportDetails(int? reportId){
....
[Route("ReportDetails/{reportId}/{approved}")]
public IActionResult ReportDetails(int? reportId, bool ? approved) {
....

您的网址将是;

/Report/ReportDetails/7 为第一个和

/Report/ReportDetails/7/第二个为真

这将适用于默认的 startup.cs

app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

关于c# - 如何为具有不同参数的同一Controller方法设置不同的路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45367992/

相关文章:

c# - 将位图转换为 ASP.NET 的图像

asp.net - 自托管 ASP.NET Web API 2 REST 服务的 token 身份验证和授权

azure - 使用 Azure SignalR 服务连接到 SignalR Hub

c# - Razor Pages - 由于多个对象共享参数,模型验证失败

c# - 在 EF Core 中自动填充 Created 和 LastModified

C# 7.0 – 丢弃和 IDisposable 输出参数

c# - 在 C# Web API 中通过 HttpRoute 改变 Unity 注入(inject)

c# - 如何在导航属性上将 IsModified 设置为 false

asp.net - 使用 Bit Framework 访问 IApplicationBuilder

asp.net-core - AspNetCore 2.1 BackgroundService\IHostedService 中的 FileSystemWatcher