URLEncode 在浏览器 MVC 中不起作用

URLEncode not working in browser MVC

你好,我需要在浏览器中传递的编码 URL 路径应该如下所示

https://localhost:44384/part-lookup/all/gmc/1973/p25%2fp2500+van/base/41l-l6

但是浏览器将此 URL 转换为以下路径,因此我收到 404 错误

https://localhost:44384/part-lookup/all/gmc/1973/p25/p2500+van/base/41l-l6

我声明的路由路径如下

routes.MapRoute(
          name: "ShopByCateShopNow",
          url: "part-lookup/{category}/{make}/{year}/{models}/{submodel}/{engine}",
          defaults: new { controller = "Home", action = "ShopNow" }
        );

这里的子模型实际值为 'P25/P2500 VAN',在对该值进行编码后,它会转换为 'p25%2fp2500+van' 值,因此无法正确重定向并显示 404 错误。

我该如何解决这个问题?

在您的控制器中,您可以使用 Request.Path.ToString() 来获取完整的路径。这将包括 p25%2fp2500+van,因此您可以使用

var url = Request.Path.ToString();
var model = url.Split('/')[4];

如果您从其他地方访问此网站,或者有时将网站托管在子文件夹中,则索引可能不会为 4。

%2F 是一个 HTML 路径字符。如果您想将其视为数据,则必须自己对其进行编码。或者创建一个在模型和子模型之间有另一个层次的路径,并在控制器中重新组合它们。

routes.MapRoute(
          name: "ShopByCateShopNow",
          url: "part-lookup/{category}/{make}/{year}/{modelprefix}/{modelsuffix}/{submodel}/{engine}",
          defaults: new { controller = "Home", action = "ShopNowPrefixSuffix" }
        );

在控制器中组合后,您可以使用 models = $"{modelprefix}/{modelsuffix}" 或类似方法调用映射到您的 ShopNow 操作的相同方法。