如何在 asp.net mvc 的查询字符串值中使用 /
how can use / in querystring value in asp.net mvc
我使用了 ASP.NET MVC5,我有一个 URL 这样的:
localhost:/product/12/nexus5x/quartz
product :controller; 12 :id; nexus5x/quartz:name
但它返回 404
错误,因为 url 中的最后一个参数包含 /
而我没有路由来支持它。
我怎样才能做到这一点?
有时最后一个参数 (productName
) 包含 /
.
第一个解决方案是用 -
替换 /
但对于某些产品我无法替换它。
您需要 encode URL。 URL 编码涉及转换字符,以便它们可以包含在查询字符串中。字符 /
被编码为 %2F
.
所以URL会变成/product/12/nexus5x%2Fquartz
要对 JavaScript 中的值进行编码,您可以调用 encodeURI 方法。
var productName = "nexus5x/quartz";
var encodedProductName = encodeURI(productName);
要在 C# 中对值进行编码,您可以调用 Uri.EscapeUriString
方法。
我相信您应该能够使用 catch all 路由。只需 在最后一个标记前添加一个星号 '*'。
这是一个使用路由属性的例子:
[Route("product/{id}/{*name}")]
这里的参数 'name' 应该 捕获过去 'id' 的所有内容,即使其中包含斜杠。
我使用了 ASP.NET MVC5,我有一个 URL 这样的:
localhost:/product/12/nexus5x/quartz
product :controller; 12 :id; nexus5x/quartz:name
但它返回 404
错误,因为 url 中的最后一个参数包含 /
而我没有路由来支持它。
我怎样才能做到这一点?
有时最后一个参数 (productName
) 包含 /
.
第一个解决方案是用 -
替换 /
但对于某些产品我无法替换它。
您需要 encode URL。 URL 编码涉及转换字符,以便它们可以包含在查询字符串中。字符 /
被编码为 %2F
.
所以URL会变成/product/12/nexus5x%2Fquartz
要对 JavaScript 中的值进行编码,您可以调用 encodeURI 方法。
var productName = "nexus5x/quartz";
var encodedProductName = encodeURI(productName);
要在 C# 中对值进行编码,您可以调用 Uri.EscapeUriString
方法。
我相信您应该能够使用 catch all 路由。只需 在最后一个标记前添加一个星号 '*'。
这是一个使用路由属性的例子:
[Route("product/{id}/{*name}")]
这里的参数 'name' 应该 捕获过去 'id' 的所有内容,即使其中包含斜杠。