2017-03-25 53 views
1

提供有关我的平台的详细信息。我正在使用.NET Core Web项目使用Visual Studio 2017。使用保留字“action”作为MVC参数名称

我正在为客户端实现新的后端,我无法更改客户端。我试图使用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 

如可以看到的在调试器的输出,对于名为“动作”的参数,接收由客户端传递的值“CWA”的isntead,我代替接收名称为“网关”,其由MVC作为动作的名称传递。

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

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

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

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

+0

我怀疑,如果startup.cs路线依赖于“动作”的含义动作,然后该死亡被施放,你将无法具有相同名称的RouteValue参数:在RouteValueDictionary中重复键。修改startup.cs听起来不错 - –

回答

0

在.NET中的核心,你可以得到你的action参数值直客Request

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

凡在.Net框架是

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

谢谢!我知道存在但找不到除QueryString []之外的任何引用,并且我认为它是.NET Core-ism ... –

相关问题