我们如何向 url 中未显示的 HttpGet IActionResult 方法发送参数

how can we send a parameter to HttpGet IActionResult method which is not show in url

public IActionResult Create(String UserID) { //do some action } 在视图中,我发送参数

<a href="/ProductRegistration/edit?UserID=@UserObject.UserID"></a>

在这个方法中值显示在 URL 我不想在 URL 中显示我们如何从主体发送参数 我的结果是 localhost:443//Admin/Create/5 我想要这种类型的结果 localhost:443//Admin/Create 这个创建方法应该接收一个参数可以吗

Mubashir,也许这样的事情可以帮助你:

using Microsoft.AspNetCore.Mvc;

[HttpPost]
public IActionResult Create([FromBody] String UserID) { //do some action }
@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post))
{
  //Code Here
}

HTTP 允许适用于在服务器上执行某些操作的不同方法。理论上 GET 旨在 获取 资源(例如网页,但也可能是 JSON object),因此不允许 body 在所有请求中。虽然您 可能 滥用自定义 headers,但我的建议是尽可能避免它。未来的开发者,甚至是你未来的自己,都会感谢你。

另一方面,

POST 请求允许将数据发布到服务器。根据规范,我认为应该期望资源随后在服务器上被更改,但在现实世界中,出于非常明显的原因,它经常被滥用来传输登录数据(你不希望你的密码显示在你的浏览器中历史,GET 请求就是这种情况 - 这可能不再适用,因为它不会出现在 JS HTTP 请求中,即使请求是 GET).

所以你必须改变你的控制器以允许 POST 请求,正如 Nick 所说,使用 HttpPostAttribute 并用表单替换 link,对于 links 根本不允许 POST 请求(GET 是浏览器的默认值)。

请参阅 this question 以了解在 HTML 页面中使用 POST 而不是 GET 的更多选项(在大多数情况下最终会成为某种形式) .

从 URL 中删除 ID 不会对任何人隐藏它。除非您由于其他一些限制而明确需要它,否则我不会打扰。如果您想隐藏它,请考虑加密您的 ID 或使用 GUID(如果是整数)。 VS 提供 System.Security.Cryptography 所以你不需要下载任何东西,它的 AES 加密被认为是当今最常用的最安全的加密方法之一。但无论如何,这只是一个建议,现在来回答你原来的问题。

在您看来,您可以这样做:

@using(Html.BeginForm()){
    <input type="text" name="nameofparameter" value="@UserObject.UserID"/> 
    <input type="submit" value="Submit" formaction="@Url.Action("ActionName","Controller")"/>
}

然后在你的控制器中,你会

[HttpPost]
public ActionResult ActionName(int nameofparameter) //note the automatic parsing
// your code here