gpt4 book ai didi

asp.net-mvc - 使用 Razor 引擎在mvc4中重写url

转载 作者:行者123 更新时间:2023-12-05 00:26:59 25 4
gpt4 key购买 nike

我想重写以下网址 -
http://localhost:99/Product/CategoryLevel?CategoryId=65&ProductName=Vitamins

http://localhost:99/Product/Vitamins ,

(或者)
http://localhost:99/Product/CategoryLevel/Vitamins
(或者)
http://localhost:99/Vitamins
(或)如何从 url 中删除(或)隐藏查询字符串(向用户显示)?

我尝试使用url重写模块(iis)和asp.net路由并在互联网上搜索解决方案,但我没有找到合适的解决方案,请提出任何解决方案。

最佳答案

你必须映射这条路线之前 所有其他路由映射(按顺序评估路由):

routes.MapRoute(
name: "Product", // any name meaningful for you is right
url: "Product/{productName}",
defaults: new { controller = "Product", action = "CategoryLevel" }
);

此路由将捕获所有如下所示的 URL:
http://myserver/Product/X

无论 X 是什么。如果这样做,您的操作应如下所示:
public ActionResult CategoryLevel(string productName)

注意:参数名称必须与路由映射中的段匹配: productName
因此,每当用户键入:
http://myserver/Product/Vitamins

行动 CategoryLevel将被执行,它会收到 productName值为 "Vitamins" 的参数

问题是如果你有一个 Action List您希望像这样被调用
http://myserver/Product/List

路由将映射它并调用 CategoryLevel使用 productName 进行操作= "List"
为避免这种情况,您可以使用以下路线:
routes.MapRoute(
name: "Product", // any name meaningful for you is right
url: "ViewProduct/{productName}",
defaults: new { controller = "Product", action = "CategoryLevel" }
);

这将与其他人不同,任何事情都会正常工作。此方法的特定 URL 如下所示:
http://myserver/ViewProduct/TheProductName

其他路线将按预期工作。

顺便说一句:您应该对产品有特定的操作,例如 View , 而不是 CategoryLevel .因此,路线和操作如下所示:
    routes.MapRoute(
name: "ViewProduct", // any name meaningful for you is right
url: "ViewProduct/{productName}",
defaults: new { controller = "Product", action = "View" }
);

产品 Controller 内部的操作:
public ActionResult View(string productName)

该路由既用于将用户键入的 url 映射到相应的操作,也用于通过使用一些 MVC 帮助程序生成 URL,例如 Html.ActionLinkUrl.Action .所以,如果你做这样的事情:
Url.Action('View', 'Product', new {productName = "Vitamins"} )

您将获得预期的短 URL:
http://myserver/ViewProduct/Vitamins

IE。路由映射它是一个双向映射,可以将 URL 映射到操作,反之亦然。

关于asp.net-mvc - 使用 Razor 引擎在mvc4中重写url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21450944/

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