我希望你一切顺利,我正在更新和简化一个项目。顺便说一句,我也在学习 .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 注册。我不明白为什么我会收到使用顶级参数的建议(如果它破坏了我的路由)。
我们通常在 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 访问。