使用保留字 "action" 作为 MVC 参数名称

Using reserved word "action" as an MVC parameter name

提供有关我的平台的详细信息。我在 .NET Core Web 项目中使用 Visual Studio 2017。

我正在为我无法更改客户端的客户端实施新的后端。我正在尝试使用 MVC 来完成此操作。

我必须能回复的URL是->https://my.server.com:8443/portal/gateway?sessionId=0A6405100000001D04FB55FE&portal=4ba457d0-e371-11e6-92ce-005056873bd0&action=cwa&token=3fcbc246bb3c35a5fa8055fec6bbf431

我想提取以下值:

因为它们都有意义。

我在我的项目中创建了一个名为 "Portal" 的新视图文件夹,并创建了一个名为 "PortalController" 的新 MVC 控制器。

我创建了一个名为 gateway.cshtml 的新视图,还实现了以下功能 ->

public IActionResult Gateway(string sessionId, string portal, string action, string token)
{
    ViewData["Message"] = "Gateway";
    return View();
}

当我在函数内设置断点时,我收到上面提供的 URL 的以下值 ->

    sessionId   "0A6405100000001D04FB55FE"              string
    portal      "4ba457d0-e371-11e6-92ce-005056873bd0"  string
    action      "gateway"                               string
    token       "3fcbc246bb3c35a5fa8055fec6bbf431"      string

从调试器的输出中可以看出,对于名为 "action" 的参数,我没有收到客户端传递的值 "cwa",而是收到了名称 [=54] =] 由 MVC 作为动作名称传递。

是否有 "proper way" 处理此问题?

我宁愿避免更改 startup.cs 文件中的路由,因为这会损害代码的模块化。我欢迎可用于重新路由参数名称的属性。

我能看到的另一种选择(买家无法弄清楚)是简单地使用 HTTP 请求来读取我感兴趣的值,而不是使用函数参数。

非常感谢您提供的任何帮助!

在 .Net Core 中,您可以使用

直接从 Request 获取 action 参数值
var action= Request.Query["action"];

它在 .Net Framework 中的位置

var action= Request.QueryString["action"];