使用属性路由 ASP.NET 时,映射端点不起作用

问题描述 投票:0回答:1

我希望你一切顺利,我正在更新和简化一个项目。顺便说一句,我也在学习 .NET

当我更改此设置时,我遇到了下一个问题:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller}/{action=Index}/{id?}");
    endpoints.MapRazorPages();
    endpoints.MapHub<NotificationsHub>("/hubs/notifications");
});

对此:

app.MapControllerRoute(name: "default", pattern: "{controller}/{action=Index}/{id?}");
app.MapControllers();
app.MapRazorPages();

此控制器中的我的属性方法停止工作

public class OidcConfigurationController : Controller
    {
        ...

        [HttpGet("_configuration/{clientId}")]
        public IActionResult GetClientRequestParameters([FromRoute]string clientId)
        {   
             ...
        }
    }

我尝试添加更多属性,但它永远不会被执行,但它继续被 Swuagger 注册。我不明白为什么我会收到使用顶级参数的建议(如果它破坏了我的路由)。

asp.net asp.net-core asp.net-mvc-routing
1个回答
0
投票

我们通常在 MVC 应用程序的模板项目中看到

app.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
,在 API 项目中看到
app.MapControllers();

app.MapControllerRoute 被称为传统路由,因为它建立了 URL 路径的约定。它允许创建应用程序,而无需为每个操作提供新的 URL 模式。这样我们就不需要为每个操作设置

[Route]
属性,因为有默认模式。

虽然调用 app.MapControllers 来映射属性路由控制器,但这是因为 REST API 应使用属性路由将应用程序的功能建模为一组资源,其中操作由 HTTP 动词表示。这需要开发人员使用

[Route]
属性为每个控制器/操作设置属性路由。

在您的场景中,我建议您在操作方法之前添加

[Route("_configuration/{clientId}")][HttpGet]
,以使其可以通过 Get url 访问。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.