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

时间:2017-03-25 07:19:45

标签: asp.net asp.net-core-mvc asp.net-mvc-routing

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

我正在为客户端实现一个新的后端,我无法改变客户端。我试图使用MVC来实现这一目标。

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

我想提取以下值:

  • 的sessionId
  • 门户
  • 动作
  • 令牌

因为他们都有意义。

我在我的项目中创建了一个名为“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”,而是接收名称“gateway”,它由MVC传递为行动的名称。

有没有“正确的方法”处理这个?

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

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

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

1 个答案:

答案 0 :(得分:0)

在.Net Core中,您可以使用

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

在.Net Framework中的位置

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