包含特定字符的操作链接路由值

本文关键字:链接 路由 操作 字符 包含特 | 更新日期: 2023-09-27 18:36:40

我正在使用此操作链接将路由值id发送到控制器,但我的 id 值如下所示config.xml这是我的行动链接

 @Html.ActionLink("Destroy", "DeleteFile", "Files", new { id = "config.xml"})

问题是当我想单击此链接浏览器时,将其理解为以config.xml结尾的url

喜欢这个

http://localhost:12380/Files/DeleteFile/config.xml

并且不转到控制器,它返回404 - not found .如何防止这种情况发生并使此config.xml作为参数而不是文件?

这也是我的路线

routes.MapRoute(
              name: "delete files",
              url: "Files/DeleteFile/{id}",
              defaults: new
              {
                  controller = "Files",
                  action = "DeleteFile",
                  id= UrlParameter.Optional
              }
            );

我也尝试了id ,filename但没有任何改变

这是我的控制器

[HttpGet]
        public ActionResult DeleteFile(string id)
        {
          return view("DeleteFile");
         }

包含特定字符的操作链接路由值

你可以像这样使用 Html.ActionLink() 的重载来做到这一点:

@Html.ActionLink("Destroy", 
                "DeleteFile", 
                "Files", 
                new RouteValueDictionary { {"file", Url.Encode("config.xml")} }, 
                null)

和操作:

public ActionResult DeleteFile(string file)
{
  // delete logic here
  return View();
}

从 MSDN:

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    RouteValueDictionary routeValues,
    IDictionary<string, Object> htmlAttributes
)

这是一个工作演示小提琴

在这里

我找到了答案,我们可以简单地在config.xml末尾添加/

这里有一些答案