Lob*_*nts 5 c# asp.net asp.net-mvc redirect
我们曾经有一些网络表单设置允许我们编辑工作。外部应用程序将使用如下 URL 访问它们:
http://server/EditJob.aspx?JobID=1235
Run Code Online (Sandbox Code Playgroud)
用 MVC 替换 Web 表单后,新 URL 为
http://server/MVC/Jobs/Edit/1235
Run Code Online (Sandbox Code Playgroud)
我希望将之前的 URL 的调用路由到新的 URl,因为无法更改客户端。我怎样才能实现这个目标?
我试过:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(name: "Job Link", url: "EditJob.aspx?JobID ={JobID}", defaults: new { area = "MVC", controller = "Jobs", action = "Edit" });
routes.MapRoute(name: "Default", url: "{controller}/{action}/{id}", defaults: new { area = "MVC", controller = "Jobs", action = "Index", id = UrlParameter.Optional });
}
Run Code Online (Sandbox Code Playgroud)
但这会给出 (System.ArgumentException: '路由 URL 不能以 '/' 或 '~' 字符开头,并且不能包含 '?' 字符。'
那么,我可以使用路由来做到这一点,还是应该重新创建旧的 Web 表单作为到新页面的重定向。
谢谢
更新
感谢所有聪明的人们,我发现了 IIS URL 重写的奇妙世界,它似乎正是我所需要的。
我现在有了这条规则,它接近我想要的:
<rewrite>
<rules>
<rule name="Jobs page redirect" stopProcessing="true">
<match url="EditJob.aspx" />
<conditions>
<add input="{QUERY_STRING}" pattern="JobID=(\d+)" />
</conditions>
<action type="Redirect" redirectType="" url="MVC/Jobs/Edit/{C:1}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)
但这会重定向到:
/MVC/Jobs/Edit/1235?JobID=1235
Run Code Online (Sandbox Code Playgroud)
看来appendQueryString =“ false”不起作用或者我错过了什么?
如果可以的话,我会使用 IIS 重写模块来完成此操作。这样,您就可以将旧 URL 的任何逻辑保留在新应用程序之外,并且如果您需要调整规则,只需调整 web.config 文件即可,而不必重新编译站点。
如果您的服务器尚未安装该模块,您可以从此页面上的链接获取它: https: //learn.microsoft.com/en-us/iis/extensions/url-rewrite-module/using-the -url-rewrite-module(您还可以使用 IIS Web 平台安装程序)。
您应该创建一个正则表达式规则来将旧 URL 重定向到新 URL。如果需要,您还可以轻松地为任何其他旧版 URL 添加规则:)
| 归档时间: |
|
| 查看次数: |
1137 次 |
| 最近记录: |