我们如何向 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
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