gpt4 book ai didi

asp.net - 我如何使用asp.net MVC4隐藏URL中的ID

转载 作者:行者123 更新时间:2023-12-02 15:56:44 25 4
gpt4 key购买 nike

我的网址

http://www.domain.com/Products/{Alias}-{ID}

和我的路线

routes.MapRoute(
name: "ProductDetail",
url: "Products/{Alias}-{detailId}",
defaults: new { controller = "Products", action = "ProductDetail", id = UrlParameter.Optional }
);

在 Controller 中

public ActionResult ProductDetail(int? detailId)
{
var pro = db.Products.Find(detailId);
if (pro == null)
{
return RedirectToAction("Index", "NotFound");
}
return View(pro);
}

现在,我想在我的 URL 中隐藏 ID,例如

http://www.domain.com/Products/{Alias}

我该怎么做

最佳答案

简答

不可能做你想做的事。如果您希望能够从 Controller 访问 detailId,则必须将 detailId 作为 URL 的一部分传递 - 您无法访问不存在的内容。

<小时/>

长答案

还有其他方法可以避免向用户“隐藏”detailId,以下是一些建议:

<强>1。使用别名代替:

您可以一起删除 detailId 并使用 Alias 值。但是,这将要求 Alias 值对于您尝试查询的产品是唯一的,并且所需的更改可能如下所示:

routes.MapRoute(
//..
url: "Products/{Alias}",
//..
);

public ActionResult ProductDetail(string Alias)
{
var pro = db.Products.FindByAlias(Alias);
//...
}

<强>2。使用 POST 请求:

另一种可以有效隐藏 URL 中的 detailId 但仍允许将值传递给 Controller ​​的解决方案是使用 POST 请求,其中参数值将在 POST 中指定请求正文。

然而,这样做的缺点是您不能简单地提供一个 URL 供用户单击,并且在您的站点内对链接进行编码需要花费更多的精力。通常,在 MVC 中,提交表单时会发生 POST 请求,您也可以使用 javascript ajax 调用来执行 POST 请求。

这个答案有点太多了,所以如果您有兴趣,请做一些研究,例如 this question ,或一般的一些info here .

<强>3。加密detailId值:

现在,此选项不会隐藏 URL 中的 detailId,但如果您担心当前 ID 过于用户友好,那么您可以“加密”(宽松地使用)该值。例如,您可以转换为 base64 字符串,然后在 Controller 中转换回 int。这会给你一个类似这样的 URL:

http://www.domain.com/Products/{Alias}-MQ%3D%3D

此 URL 将 1 表示为 detailId,并且您必须确保 URL encode/decode如果使用此方法,您的值(value)观。

在这种情况下,Base64 转换并没有真正对其进行“加密”,任何半精明的用户都会注意到这一点并可以绕过它。但是,如果您想采用这种方法,您可以轻松地使用更安全的双向加密算法,即只有服务器知道加密/解密 key 的方法。这里的缺点是只有服务器才能生成有效的 URL 供用户“点击”。

<小时/>

此时值得考虑的是,如果您担心 URL 包含简单的数字 ID 过于用户友好,那么问题是:您为什么关心?

如果您担心用户可以简单地更改 detailId 值,然后访问他们应该访问的产品,那么您的安全问题就更大了。如果是这种情况,那么您的 Controller 应该负责验证用户是否有权访问他们尝试访问的产品,然后采取相应的行动。

所有安全检查和验证都应在服务器端处理,切勿依赖客户端代码或用户操作来为您执行此操作。

关于asp.net - 我如何使用asp.net MVC4隐藏URL中的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32005426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com