asp.net-mvc – 使用URL重写时Url.Action不正确

当我使用URL重写时,我从Action方法中收到不正确的URL.

我在web.config中有这个重写规则:

<rule name="Old Objects 2" stopProcessing="true">
  <match url="^transportbilar/(nya|begagnade|miljobilar)/(.*)$" ignoreCase="true"/>
  <action type="Rewrite" url="/transportbilar/{R:2}"/>
</rule>

这将重写一个像/ transportbilar / nya / fiat / 7s76s8dg这样的URL到/ transportbilar / fiat / 7s76s8dg,这很好,但是Url.Action被这个困惑了.

我使用这样的表达式在页面中创建一个URL:

url.Action("Slideshow","Object",new { id = objectId });

当URL重写不被使用(直接浏览页面)时,这会产生正确的URL / Object / Slideshow / 7s76s8dg,但是当使用URL重写时,Action方法会将页面URL的第一部分添加生成的URL,并生成不正确的URL / transportbilar / Object / Slideshow / 7s76s8dg.

我认为我可以在重写规则中做一个重定向,这将会绕过这个问题,因为请求的URL会改变,但是有没有办法让它在不改变重定向的情况下工作?

编辑:

我认为可能相关的路线是这些(按此顺序添加):

transportbilar/handlare/{id}/{criteria}
transportbilar/handlare
transportbilar
transportbilar/sokresultat/{criteria}
transportbilar/{brand}/{id}/{criteria}
{controller}/{action}/{id}

最后一条路线会抓住url / Object / Slideshow / 7s76s8dg,而最后一条路线会抓住/ transportbilar / fiat / 7s76s8dg.

解决方法

嗯..不要以为我可以帮你找到你重写的解决方案.我猜内部IIS / ASP.NET可能会遇到您尝试在路由中破解正则表达式映射时可能遇到的问题 – 即URL.Action无法从Controller / Action组合确定正确的反向映射.

您可以查看以下内容对您的网址的看法,如果您提供了关于什么问题的提示

<%= Request.Path %>
<%= Request.RawUrl %>
<%= Request.ServerVariables["HTTP_URL"] %>

…看看`/ transportbilar’是否被添加到那个阶段.

无论如何,我会认真地重定向旧的网址.这种方法将您实际的当前系统与遗留系统隔离开来,特别是因为您的路由收集似乎已经很复杂了.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....