use*_*404 4 asp.net-mvc url-rewriting query-string asp.net-mvc-4 url-rewrite-module
我想重写以下网址 -
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" }
);
Run Code Online (Sandbox Code Playgroud)
此路由将捕获所有看起来像这样的URL:
http://myserver/Product/X
Run Code Online (Sandbox Code Playgroud)
无论X是什么.如果您这样做,您的操作应如下所示:
public ActionResult CategoryLevel(string productName)
Run Code Online (Sandbox Code Playgroud)
注意:参数名称必须与路由映射中的段匹配: productName
因此,每当用户输入:
http://myserver/Product/Vitamins
Run Code Online (Sandbox Code Playgroud)
该动作CategoryLevel
将被执行,它将接收productName
带有该值的参数"Vitamins"
问题是如果你有一个List
你希望像这样调用的动作
http://myserver/Product/List
Run Code Online (Sandbox Code Playgroud)
路由将映射它并将CategoryLevel
使用productName
= 调用操作"List"
为避免这种情况,您可以使用此路线:
routes.MapRoute(
name: "Product", // any name meaningful for you is right
url: "ViewProduct/{productName}",
defaults: new { controller = "Product", action = "CategoryLevel" }
);
Run Code Online (Sandbox Code Playgroud)
这将与其他人不同,任何事情都可以正常工作.特定于此方法的URL将如下所示:
http://myserver/ViewProduct/TheProductName
Run Code Online (Sandbox Code Playgroud)
其他路线将按预期工作.
顺便说一句:您应该对产品进行特定操作,例如View
,而不是CategoryLevel
.所以,路线和动作看起来像这样:
routes.MapRoute(
name: "ViewProduct", // any name meaningful for you is right
url: "ViewProduct/{productName}",
defaults: new { controller = "Product", action = "View" }
);
Run Code Online (Sandbox Code Playgroud)
产品控制器内部的操作:
public ActionResult View(string productName)
Run Code Online (Sandbox Code Playgroud)
该路由既用于将用户键入的URL映射到相应的操作,也用于通过使用某些MVC助手生成URL,如Html.ActionLink
或Url.Action
.所以,如果你做这样的事情:
Url.Action('View', 'Product', new {productName = "Vitamins"} )
Run Code Online (Sandbox Code Playgroud)
你会得到预期的短网址:
http://myserver/ViewProduct/Vitamins
Run Code Online (Sandbox Code Playgroud)
即路线图,它是一个双向地图,可以将URL映射到动作,反之亦然.
归档时间: |
|
查看次数: |
11063 次 |
最近记录: |