使用参数调用 ASP.Net 核心 MVC 控制器操作不起作用

Invoke ASP.Net Core MVC controller action with parameter doesn't work

我有一个简单的 ASP.NET 核心 MVC 控制器操作方法定义为:

public class MyMVCController : Controller
{
    public async Task<IActionResult> MyAction(String usrid)
    {
        // ...
    }
}

当我使用这个 URI 调用它时:

https://localhost:6009/MyMVC/MyAction/073214df

我的操作被调用并且我返回 return,但参数 usrid 始终为空。我做错了什么?

更新

@Jackdaw 的第一个解决方案,将参数名称从 usrid 更改为 id 对我有用。但是,具有属性的则没有。虽然确实传入了参数,但操作将失败,因为下面一行中的 accessToken 以某种方式 return 为 null。第一种解决方案不是这样。

[Route("MyMVC/MyAction/{usrid?}")]
public async Task<IActionResult> MyAction(String usrid)
{
        var accessToken = await HttpContext.GetTokenAsync("access_token");
        var client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        // ...
}

最后,我想出了如何让基于属性的路由解决方案发挥作用——向操作方法添加另一个属性 [Authorize]。不要问我为什么我必须这样做,为什么我不在 usrid/id 解决方案中。

这是因为默认路由模式具有以下定义:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

因此,如果将方法参数名称更改为id,它将起作用:

public async Task<IActionResult> MyAction(String id)

或者您可以将以下路由属性应用于该方法:

[Route("MyMVC/MyAction/{usrid?}")]
public async Task<IActionResult> MyAction(String usrid)
{
    // ...
}

测试截图: